vector—C++笔记
#include<iostream>
#include<vector>
using namespace std;
void test(){
//创建一个vector容器,数组
vector<int> v;
//向容器中插入数据(尾插)
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
//尾删
v.pop_back(); //10 20 30
//插入 第一个参数的迭代器
v.insert(v.begin(),100); //100 10 20 30 (在第一个位置插)
v.insert(v.begin(),2,1000); //1000 1000 100 10 20 30(插两个1000)
v.insert(v.begin()+1,2); //1000 2 1000 100 10 20 30(在第二个位置插)
//删除 参数也是迭代器
v.erase(v.begin()); //10 20 30
v.erase(v.begin(),v.end()); //左闭右开,删除全部==v.clear();
vector<vector<int> >num =
{ {1,1,1,0,1,1},{1,0,1,1,1,1},{1,1,1,0,0,1},{1,0,1,0,0,1},{1,1,1,1,1,1} };
vector<int>v1; //若里面有10 20 30 40
//构造同时赋值
vector<int>v2(v1); //v2: 10 20 30 40
vector<int>v3(v1.begin()+1,v1.end()); //v3: 20 30 40(用区间赋值)
vector<int>v4(4,100); //v4: 100 100 100 100 (4个100)
vector<int>v5(4); //声明v5大小为4 内容默认为 0 0 0 0
cout<<v5[0]; //0
{若只 vector<int>v5; 直接访问 v5[0] 会报错,除非访问前插入元素}
//容量和大小
vector<int>v1; //若里面有0 1 2 3 4 5 6 7 8 9
//v1.empty() 为真 代表容器为空
v1.capacity(); // v1容量:13 (系统开辟的,capacity>=size)
v1.size(); //10 (v1里面有10个元素)
// v1.resize(15); //0 1 2 3 4 5 6 7 8 9 0 0 0 0 0 (默认填0)
v1.resize(15,100); //0 1 2 3 4 5 6 7 8 9 100 100 100 100 100
v1.resize(5); //0 1 2 3 4 超出部分被删
//交换容器
vector<int>v1; //里面有0 1 2 3 4 5 6 7 8 9
vector<int>v2; //里面有10 9 8 7 6 5 4 3 2 1
v1.swap(v2); //v1 : 10 9 8 7 6 5 4 3 2 1
//v2 : 0 1 2 3 4 5 6 7 8 9
{扩展:巧用swap收缩内存
若v1中存10000个数。。。。
v1.capacity(); //13825
v1.size(); //10000
v1.resize(3); //缩小
v1.capacity(); //13825 仍然占内存。。。。。
v1.size(); //3
vector<int>(v1).swap(v1); //*******
v1.capacity(); //3 收缩内存
v1.size(); //3
}
//遍历(个人感觉最好)
//一维
for(int i=0;i<v1.size();i++){
cout<<v1[i]<<" ";
}
//二维
vector<vector<char>> matrix; //matrix中已存入一些数了,这里随便举个例子
int rows = matrix.size(), columns = matrix[0].size();
vector<vector<int>> dp(rows, vector<int>(columns));
for(int i=0;i<rows;i++){
for(int j=0;j<columns;j++){
dp[i][j]=matrix[i][j]-'0'; //将matrix中char型转成int型
}
}
}
遍历另外的方法
//第一种遍历方式
//通过迭代器访问容器中的数据
vector<int>::iterator itBegin = v.begin();//起始迭代器,指向容器中第一个元素
vector<int>::iterator itEnd = v.end();//结束迭代器,指向容器中最后一个元素的下一个位置
while(itBegin != itEnd)
{
cout<<*itBegin<<endl;
itBegin++;
}
//第二种遍历方式
for(vector<int>::iterator it=v.begin();it != v.end();it++){
cout<<*it<<endl;
}