STL容器学习(二)
2 vector
向量(动态数组)
头文件 #include<vector>
using namespace std;
定义向量对象 vecyor<int> vec;
vecyor容器的初始化
#include<iostream> #include<string> #include<vector> using namespace std; int main() { vector<int> vec1(5,12); vector<int> vec2(5,'a'); for(int i=0;i<5;i++) { cout<<vec1[i]<<"\n"<<vec2[i]<<"\n"; } return 0;
#include<iostream> #include<string> #include<vector> using namespace std; int main() { vector<int> vec1(5,12); vector<char> vec2(5,'a'); for(int i=0;i<5;i++) { cout<<vec1[i]<<"\n"<<vec2[i]<<"\n"; } return 0; }
#include<iostream> #include<string> #include<vector> using namespace std; int main() { vector<int> vec1(5,12); vector<char> vec2(5,'a'); vector<int> vec3(vec1); for(int i=0;i<5;i++) { cout<<vec3[i]<<" "; } return 0; }
vector迭代器
对同一类型
#include<iostream> #include<string> #include<vector> using namespace std; int main() { vector<int> vec2(5,11); vector<int> vec3(5,1); vector<int>::iterator ite=vec2.begin();//头迭代器 vector<int>::iterator ite1=vec2.end();//尾迭代器 vector<int> vec1(ite,ite1); for(int i=0;i<5;i++) { cout<<vec1[i]<<" "; } return 0; }
vector容量
定义多少就是多少
容量不够时系统会自动增加容量
#include<iostream> #include<string> #include<vector> using namespace std; int main() { vector<int> vec(4);//定义容量为5 cout<<vec.capacity()<<endl;//输出容器容量 vec.push_back(1);//增加一个元素 ,导致容量不够,系统自动增加容量 cout<<vec.capacity()<<endl;//4+4 return 0; }

reserve()修改vector容量大小
#include<iostream> #include<string> #include<vector> using namespace std; int main() { vector<int> vec(4);//定义容量为5 cout<<vec.capacity()<<endl;//输出容器容量 vec.reserve(8); cout<<vec.capacity()<<endl; return 0; }
size() 元素个数
resize() 重新定义元素个数
empty()
#include<iostream> #include<string> #include<vector> using namespace std; int main() { vector<int> vec(4); vec.resize(5);//重新定义元素个数 cout<<vec.size()<<endl;//元素个数 cout<<vec.empty()<<endl;//vec空返回1,有元素返回0 return 0; }
vector输出
下标运算 vec[],at函数 vec.at()
返回尾元素 back()
返回头元素 begin()
for_each(vec.begin(),vec.end(),函数)
增加元素
尾添加
push_back()
中间添加
vec.insert(vec.begin()+2,12) //下标为2的位置插入
vec.insert(vec.begin()+2,num,12) //下标为2的位置插入numge
vec.insert(vec.begin()+2,vec1.begin(),vec.end()) //下标为2的位置插入vec1的元素
删除元素
尾删除
pop_back()
#include<iostream> #include<string> #include<vector> #include<algorithm> using namespace std; void f(int a) { cout<<a<<endl; } int main() { vector<int> vec; for(int i=0;i<4;i++) { vec.push_back(i); } vec.pop_back(); for_each(vec.begin(),vec.end(),f); return 0; }
中间删除
#include<iostream> #include<string> #include<vector> #include<algorithm> using namespace std; void f(int a) { cout<<a<<endl; } int main() { vector<int> vec; for(int i=0;i<4;i++) { vec.push_back(i); } vec.erase(vec.begin()+1);//删除下标为1的字符 for_each(vec.begin(),vec.end(),f); vec.erase(vec.begin()+1,vec.end());//删除下标尾1后的所有字符 for_each(vec.begin(),vec.end(),f); return 0; }
修改
利用输出形式修改
eg:迭代器
#include<iostream> #include<string> #include<vector> #include<algorithm> using namespace std; void f(int a) { cout<<a<<endl; } int main() { vector<int> vec; for(int i=0;i<4;i++) { vec.push_back(i); } vector<int>::iterator ite=vec.begin(); for(ite;ite!=vec.end();ite++) { *ite=9; } for_each(vec.begin(),vec.end(),f); return 0; }
交换
swap()
#include<iostream> #include<string> #include<vector> #include<algorithm> using namespace std; void f(int a) { cout<<a<<endl; } int main() { vector<int> vec1; vector<int> vec2(4,7); for(int i=0;i<4;i++) { vec1.push_back(i); } vec1.swap(vec2); for_each(vec1.begin(),vec1.end(),f); for_each(vec2.begin(),vec2.end(),f); return 0; }
运算符重载
比较两个vector数组大小。真就返回1,假就返回2
比较规则:数组对应下标中的值
#include<iostream> #include<string> #include<vector> #include<algorithm> using namespace std; /*void f(int a) { cout<<a<<endl; }*/ int main() { vector<int> vec1; vector<int> vec2(4,7); for(int i=0;i<4;i++) { vec1.push_back(i); } cout<<(vec1<vec2)<<endl; /*vec1.swap(vec2); for_each(vec1.begin(),vec1.end(),f); for_each(vec2.begin(),vec2.end(),f);*/ return 0; }
排序 sort()
头文件 <algorithm>
#include<iostream> #include<string> #include<vector> #include<algorithm> using namespace std; void f(int a) { cout<<a<<endl; } int main() { vector<int> vec1; vec1.push_back(20); vec1.push_back(46); vec1.push_back(48); vec1.push_back(12); vec1.push_back(45); sort(vec1.begin(),vec1.end()); for_each(vec1.begin(),vec1.end(),f); return 0; }
从大到小
#include<iostream> #include<string> #include<vector> #include<algorithm> #include<functional> using namespace std; void f(int a) { cout<<a<<endl; } int cmp(int x,int y) { return x>y; } int main() { vector<int> vec1; vec1.push_back(20); vec1.push_back(46); vec1.push_back(48); vec1.push_back(12); vec1.push_back(45); sort(vec1.begin(),vec1.end(),cmp); for_each(vec1.begin(),vec1.end(),f); return 0; }
greater<>() 从大到小
头文件 <functional>
#include<iostream> #include<string> #include<vector> #include<algorithm> #include<functional> using namespace std; void f(int a) { cout<<a<<endl; } /*int cmp(int x,int y) { return x>y; }*/ int main() { vector<int> vec1; vec1.push_back(20); vec1.push_back(46); vec1.push_back(48); vec1.push_back(12); vec1.push_back(45); sort(vec1.begin(),vec1.end(),greater<int>()); for_each(vec1.begin(),vec1.end(),f); return 0; }
浙公网安备 33010602011771号