vector用法目錄:
6、vector實戰(這里寫的是我在最開始用vector時候犯的錯誤)
1、基本用法:
頭文件:
#include<vector>
定義vector:
整數型: vector<int>a;
字符型: vector<char>a;
字符串型: vector<string>a; (注意字符串型輸入輸出用cin和cout)
固定vector的大小:
vector<int>a(105);
在容器最后存入新元素:
for(int i=0;i<10;i++){
b.push_back(i);
}
將字符數組中的數據賦值給容器:
1、遍歷賦值:
char a[MAX+5];
vector<char>vc;
cin>>a;
int la=strlen(a);
for(int i=0;i<la;i++)
vc.push_back(a[i]);
2、定義容器時賦值:
char a[MAX+5];
cin>>a;
int la=strlen(a);
vector<char>vc(a,a+la);
判斷容器的長度:
printf("%d\n",b.size());
遍歷容器中元素:
1、遍歷輸出
for(int i=0;i<vc.size();i++)
printf("%c",vc[i]);
printf("\n");
2、錯誤示例:
for(int i=vc.begin();i<vc.end();i++){
cout<<vc[i]<<" ";
}
cout<<endl;
清空容器、判斷是否為空、刪除最后元素:
清空容器: a.clear();//清空a中的元素
判斷容器是否空:a.empty();//判斷a是否為空,空則返回ture,不空則返回false
刪除容器最后的元素: a.pop_back(); ///括號內不可以添加index刪除指定元素
2、vector的刪除操作
vector很好的一點就是可以實現刪除操作,用它來做模擬很好實現。
1、函數使用:
vc.erase(vc.begin(),vc.end()); ///vc.erase()可以刪除一個或多個元素
2、說明:
vc.erase()函數中添加的地址范圍是左閉右開區間,刪除內容后,如果后面還有元素,會自動補全空位。
3、注意:
///vc.erase()函數中不是直接加要刪除的內容,下面例子是錯誤的。
vc.erase('a');
3、vector的sort排序(加#include<algorithm>頭文件)
將元素從小到大的順序排列(默認):
int c1[]={1,3,11,2,66,22,-10};
vector<int>c(c1,c1+7); ///賦初值
sort(c.begin(),c.end());
for(int i=0;i<c.size();i++){
printf("%d ",c[i]);
}
printf("\n");
重寫cmp函數按要求排序:
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
bool cmp(int x,int y) ///cmp函數傳參的類型不是vector<int>型,是vector中元素類型,即int型
{
return x>y;
}
int main()
{
int c1[]={1,3,11,2,66,22,-10};
vector<int> c(c1,c1+7);
sort(c.begin(),c.end(),cmp);
for(int i=0;i<c.size();i++){
printf("%d ",c[i]);
}
printf("\n");
return 0;
}
vector<node>(結構體)的cmp函數與其類似
4、翻轉vector中的所有元素:
int d1[]={1,3,11,2,66,22,-10};
vector<int> d(d1,d1+7);
reverse(d.begin(),d.end()); ///不是d.reverse()
for(int i=0;i<d.size();i++){
printf("%d ",d[i]);
}
printf("\n");
5、find()函數的用法:
int temp1[]={ 1,3,2,4,5,0 };
vector<int> temp(temp1,temp1+6);
vector<int>::iterator it=find(temp.begin(),temp.end(),3);///返回的是地址
int index=&*it-&temp[0];///放入迭代器中得到容器中的位置
printf("%d\n",index);
6、vector實戰:(這里寫的是我在最開始用vector時候犯的錯誤)
vector沒申請不能直接賦值
vector<int>a;
for(int i=0;i<10;i++){
a[i]=5; ///vector[i]根本沒被申請,所以不可以直接賦值
}
vector<int>a;
for(int i=0;i<10;i++){
a.push_back(i); ///申請a[3]后,下面可以直接改變它的值
}
a[3]=6;
vector<int>a(10);///先申請一個大小為10的向量后也可以直接改變a[3]的值
a[3]=6;
(上面只是vector的一部分內容,后續會逐漸補充,不足請評論)