动态数组vector
1、创建:
- vector<int>v;
- vector<int>v1; vector<int>v2(v1) 即 vector<int>v2 = v1;
- vector<int>v = {1,3,5,7,9}; 即 vector<int>v{1,3,5,7,9};
- vector<int>v1{1,3,5,7,9}; vector<int>v2(v1.begin()+1,v1.end()-1); 即 v2 = {3, 5, 7};
- vector<int>v(4); 即 创建了一个容量为4的容器 v
- vector<int>(4,0); 即 v 中初始有4个值为0的元素
二维数组
- vector<int>v[n]
- vector<vector<int> >v;
2、使用:
- 常用
- v.push_back(a); //将a添加到 v 的末尾
- v.size(); //返回 v 的元素个数
- v.clear(); //清空 v v中的元素
- v.empty(); //若 v 为空则返回true,否则返回false
- v.begin() & v.end(); //返回 v 头尾的迭代器
- 赋值
- 直接赋值:v1 = v2;
- 使用assign函数
- v1.assign(v1.begin()+2, v2.end()-1);
- v1.assign(6,1) // v 只含6个元素,每个元素为1
- v1.swap(v2) //将 v1 与 v2 的元素进行整体交换
- 插入
- v.insert(v.begin()+1,5); //在 v 的第一个参数下标序号前插入5({1,2,3} ——>{1,5,2,3})
- v.insert(a.begin()+1,2,4); //在v的第1个元素的位置插入2个数,其值都为4
- v.insert(v.begin()+2,a+2,a+7); //在 v 的第二个元素前插入数组 a 的第2到第6个元素
- 删除
- v.pop_back(); //删除 v 的最后一个元素
- v.erase(v.begin()+i); //删除第i个元素
- v.erase(v.begin()+i, v.begin()+j); //删除第i到第j个元素,不包括第j个元素
- 扩容
- v.capacity(); //返回 v 在内存中总共可以容纳的元素个数
- v.resize(10); //将 v 的现有元素个数调至10个,多则删,少则补,其值随机
- v.resize(10,2); //将 v 的现有元素个数调至10个,多则删,少则补,其值为2
3、操作
- 访问
- 1、v[i]
- 2、vector<int>::iterator it = v.begin(); // auto it = v.begin();
- cout << *it;
- 遍历
- 第1种
- for(int i=0;i<v.size();i++)
- cout << v[i] << endl;
- 第2种
- for(vector<int>::iterator it=v.begin();it<v.end();it++)
- cout << *it << endl;
- 第3种
- for(auto i : v)
- cout << i << endl //链接auto
- 第4种
- for_each循环
-
#include<iostream> #include<vector> #include<string> #include<algorithm> using namespace std; struct Play{ Play(string t) : str(t){} bool operator()(string s){ // str += s; cout << str << s << endl; } string str; }; //第一种 void print(string &s){ cout << s << endl; } //第二种 vector<string>v{"0","123","456","789","结束"}; int main(){ for_each(v.begin(),v.end(),Play("name=")); for_each(v.begin(),v.end(),print); return 0; }
- v.front() 返回v的第一个元素,v.back() 返回v的最后一个元素
- 排序
- sort函数
-
#include<iostream> #include<vector> #include<algorithm> #include<cstring> using namespace std; struct student{ int grade; char name[10]; bool operator < (const student &s) const{ if(grade != s.grade)return grade < s.grade; else return strcmp(name,s.name) < 0; } //第一种,重载小于号 }; bool cmp(student a, student b){ if(a.grade != b.grade)return a.grade < b.grade; else return strcmp(a.name,b.name) < 0; } //第二种,另外写函数 int main(){ vector<int>v; vector<student>u; sort(v.begin(),v.end()); //从小到大(默认) sort(v.begin(),v.end(),less<int>() ) //从小到大 sort(v.begin(),v.end(),greater<int>() ) //从大到小 sort(u.begin(),u.end()); //第一种 sort(u.begin(),u.end(),cmp); //第二种 }
-
查找
- find 函数
- find(v.begin(),v.end(),x) ,返回x在 v 中的索引(迭代器),否则返回v.end();
- find_if函数
-
#include<iostream> #include<vector> #include<string> #include<algorithm> using namespace std; struct student{ int age; string name; }; struct Play{ Play(int t) : age(t){} bool operator()(student &he){ return he.age > age; } int age; }; //第一种 bool cmp(student &s){ return s.age > 18; } //第二种 int main(){ vector<student>v(4); v[1] = {1,"Tom"}; v[2] = {12,"Mark"}; v[3] = {19,"Rose"}; auto it = find_if(v.begin()+1,v.end(),Play(18)); auto it = find_if(v.begin()+1,v.end(),cmp); cout << it->name; return 0; }
来源:https://www.cnblogs.com/Cmathe/p/12256830.html