参考
CSDN 顽强的土豆地雷
https://blog.csdn.net/fuxingdecsdn/article/details/80411649
CSDN kinghero123456
https://blog.csdn.net/u014378771/article/details/90295900
菜鸟教程
https://www.runoob.com/w3cnote/cpp-vector-container-analysis.html
头文件
#include<vector>
定义
//第一种:不传参数 vector<int> vint; vector<char> vchar; vector<string> vstring; //第二种:传一个参数 相当于开辟了一个数组 vector<int> vint2(5); vector<char> vchar2(5); vector<string> vstring2(5); //第三种:参数一 n个元素,每个元素的初值 开辟数组并进行初始化 vector<int> vint3(5,0); vector<char> vchar3(5,'a'); vector<string> vstring3(5,"a"); //第四种:传一段迭代器区间 vector<int> vint4(vint3.begin(),vint3.end()); vector<char> vchar4(vchar3.begin(),vchar3.end()); vector<string> vstring4(vstring3.begin(),vstring3.end()); //第五种:传一个对象,既拷贝函数 vector<int> vint5(vint3); vector<char> vchar5(vchar3); vector<string> vstring5(vstring3); //第六种:赋值运算符的重载 vector<int> vint6; vector<char> vchar6; vector<string> vstring6; vint6=vint5; vchar6=vchar5; vstring6=vstring5;
在容器最后插入和删除元素
.push_back()
.pop_back()
#include <string.h> #include <vector> #include <iostream> using namespace std; int main() { vector<int>obj;//创建一个向量存储容器 int for(int i=0;i<10;i++) // push_back(elem)在数组最后添加数据 { obj.push_back(i); cout<<obj[i]<<","; } for(int i=0;i<5;i++)//去掉数组最后一个数据 { obj.pop_back(); } cout<<" "<<endl; for(int i=0;i<obj.size();i++)//size()容器中实际数据个数 { cout<<obj[i]<<","; } return 0; }
运行结果
0,1,2,3,4,5,6,7,8,9, 0,1,2,3,4,
删除指定元素
.erase()
#include "stdafx.h" #include "iostream" #include "vector" using namespace std; int main() { vector<int> NumberArray; NumberArray.push_back(1); NumberArray.push_back(1); NumberArray.push_back(2); NumberArray.push_back(2); //查找并删除指定元素 int iFind = 1; vector<int>::iterator it = find(NumberArray.begin(), NumberArray.end(), iFind); //第一次查找 while (it != NumberArray.end()) //判断是否找到 { it = NumberArray.erase(it); //找到了删除 并 移动 it 指向下一个位置 //错误写法: NumberArray.erase(it); it++; //原因vector中元素被删除之后it已经失效,不能进行++操作 it = find(it, NumberArray.end(), iFind); //继续查找 } return 0; }
指定位置插入元素
.insert()
vector<int> temp; //初始化后 temp.insert(temp.begin()+2,9)//在temp的第2位后插入元素9
清除
.clear()
#include <string.h> #include <vector> #include <iostream> using namespace std; int main() { vector<int>obj; for(int i=0;i<10;i++)//push_back(elem)在数组最后添加数据 { obj.push_back(i); cout<<obj[i]<<","; } obj.clear();//清除容器中所以数据 for(int i=0;i<obj.size();i++) { cout<<obj[i]<<endl; } return 0; }
结果
0,1,2,3,4,5,6,7,8,9,
大小
//用来描述大小的一系列函数 vector<int> test(5,1); cout<<test.size()<<endl;//表示顺序表的元素个数 cout<<test.capacity()<<endl;//表示顺序表的容量 cout<<test.max_size()<<endl;//表示容器的最大存储,但实际到不了 test.resize(1);//设置大小,可以开辟出更多的空间,当参数小于时就销毁空间 test.resize(10,2);//当大于时就开辟并初始化 cout<<test.size()<<endl; test.empty();//用来检查是否为空 test.reserve(10);//用来设置容器大小但是并不初始化,元素个数也没变,变化不可见 test.shrink_to_fit();//将容器的大小收缩至于元素个数相同的大小
排序
#include <string.h> #include <vector> #include <iostream> #include <algorithm> using namespace std; int main() { vector<int>obj; obj.push_back(1); obj.push_back(3); obj.push_back(0); sort(obj.begin(),obj.end());//从小到大 cout<<"从小到大:"<<endl; for(int i=0;i<obj.size();i++) { cout<<obj[i]<<","; } cout<<" "<<endl; cout<<"从大到小:"<<endl; reverse(obj.begin(),obj.end());//从大到小 for(int i=0;i<obj.size();i++) { cout<<obj[i]<<","; } return 0; }
结果
从小到大: 0,1,3, 从大到小: 3,1,0,
访问
//关于元素存取的函数 //operator[] 既重载[]使其类似于数组元素的操纵,实现随机访问 cout<<test.at(1)<<endl;//类似于[]的作用,只是是一个函数行形式 cout<<test.front()<<endl;//显示存在的第一个元素 cout<<test.back()<<endl;//显示存在的最后一个元素 int* p = test.data();//取到了一个指向顺序表的一个指针 cout<<test.front()<<endl;//显示存在的第一个元素 //修改动作函数 test.assign(arr,arr+3);//assign替换函数可以替换一个对象的区间或者一个同类型的数组 test.push_back(4);//尾插,并没有头插 test.pop_back();//尾删 test.insert(it,5);//插入指定位置 test.erase(it);//删除指定位置 test.swap(test1);//交换函数,将两个对象进行交换 test.clear();//清空整个顺序表 vector<int>::iterator it2=test.emplace(it,5);//类似于insert但是会返回新插入元的迭代器 test.emplace_back(10);//类似于尾插