綠色計算大賽--字串反轉
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;
}