1. 程式人生 > >綠色計算大賽--字串反轉

綠色計算大賽--字串反轉

vector

簡單介紹 1.vector是可變大小陣列的序列容器。 2.其可以採用連續儲存空間來儲存元素。也就意味著可以採用下標對vector的元素進行訪問,其和陣列一樣高效。和陣列的區別就是它的大小可以改變,並且其大小會被容器自動處理。 3.vector的動態大小的形成是其在開始的時候就分配了多餘的儲存空間,用來應對可能發生的增長。 4.其每次在陣列的末尾進行插入刪除操作,所以其效率也是非常高的。 使用方法 1.標頭檔案

#include<vector>

2.宣告及初始化

vector<int>vec; //宣告一個int型向量
vector<int>vec(5); //宣告一個初始大小為5的int型向量
vector<int>vec(10,1); //宣告一個初始大小為10且值都為1的int型向量
vector<int>vec(tmp); //宣告並用tmp向量初始化vec向量
vector<int>tmp(vec.begin(),vec.begin()+3); //宣告並用向量vec的第0-2個值初始化tmp向量
int arr[5] = {1, 2, 3, 4, 5};   
vector<int> vec(arr, arr + 5);      //將arr陣列的元素用於初始化vec向量
//說明:當然不包括arr[4]元素,末尾指標都是指結束元素的下一個元素,
//這個主要是為了和vec.end()指標統一。
vector<int> vec(&arr[1], &arr[4]); //將arr[1]~arr[4]範圍內的元素作為vec的初始值

基本操作 (1).容量

  • 向量大小:vec.size();

  • 向量最大是容量:vec.max_size();

  • 更改向量的大小:vec.resize();

  • 向量真實大小:vec.capacity();

  • 向量判空:vec.empty();

  • 減少向量大小到滿足元素所佔儲存空間的大小:vec.shrink_to_fit(); (2).修改

  • 多個元素賦值:vec.assign();//類似於初始化時用陣列進行賦值

  • 末尾新增元素:vec.push_back();

  • 末未刪除元素:vec.pop_back();

  • 任意位置插入元素:vec.insert();

  • 任意位置刪除元素:vec.erase();

  • 交換兩個向量的元素:vec.swap();

  • 清空向量的元素:vec.clear(); (3).迭代器

  • 開始指標:vec.begin();

  • 末尾指標:vec.end();//指向最後一元素的下一個元素

  • 指向常量的開始指標:vec.cbegin();//不可以通過這個指標來修改所指的內容,但可以通過其他方式修改,而且指標可以移動。

  • 指向常量的末尾指標:vec.cend(); (4).元素的訪問

  • 下標訪問:vec{1};//並不會檢查是否越界

  • at方法訪問:vec.at(1);//以上兩者的區別就是at會檢查是否越界,是則丟擲out of range異常

  • 訪問第一個元素:vec.front();

  • 訪問最後一個元素:vec.back();

  • 返回一個指標:int *p = vec.data();//因為vector在記憶體中是一個連續儲存的陣列,所以可以返回一個指標指向這個陣列。 (5).遍歷陣列

  • 遍歷元素

	int a[5]={1,2,3,4,5};
	vector<int>vec(&a[1],&a[4]);//初始化
	vector<int>::iterator it;
	for(it=vec.begin();it!=vec.end();it++)
		cout<<*it<<endl;
	for(size_t i = 0;i< vec.size();i++)
		cout<<vec.at(i)<<endl;
  • 元素翻轉
	int a[5]={1,2,3,4,5};
	vector<int>vec(&a[1],&a[4]);
	vector<int>::iterator it;
	for(it=vec.begin();it!=vec.end();it++)
		cout<<*it<<endl;
	reverse(vec.begin(),vec.end());
	for(size_t i = 0;i< vec.size();i++)
		cout<<vec.at(i)<<endl;
  • 元素排序
sort(vec.begin(),vec.end);

實戰–字串反轉

在這裡插入圖片描述

程式碼

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<char>inversion(string str){
	int i;
	int len = str.length();
	static vector<char> cat;
	for(i=len-1;i>=0;i--){
		cat.push_back(str[i]);
	}
	return cat;
}

int main(){
	
	char a[1005];
	gets(a);
	string s(a);//必須轉換為string型別才可以
	vector<char>vec;
	vec = inversion(s);
	for(size_t i = 0;i< vec.size();i++)
		cout<<vec.at(i);
	return 0;
}