C++学习记录-STL:vector

一、认识vector

​ 1.vector是向量类型,可以存储多种类型的数据,因此属于STL中容器的一种

​ 2.vector可以理解为动态数组。内存动态扩展的方式为:新开辟一块更大的内存,将数据拷贝过去,

​ 再释放原来的内存

​ 3.使用vector时应包含头文件

​ 4.vector容器中也可以存放自定义的数据类型(比如类),也可以存放另一个容器,只要声明数据

​ 类型即可

二、vector的初始化

语法:vector<数据类型> 名称

1
2
3
4
5
6
7
8
9
10
11
12
13
14
- vector<int> a;//向量名为a 


- vector<int> a(10);//向量名为a,具有10个整形元素


- vector<int> a(10,777);//向量名为a,具有10个整形元素且都为777


- int b[3]={0,1,2};
vector<int> a(b,b+3);//将数组b中的三个元素(从下标0到2)赋值给a


- vector<int>a(b.begin(),b.begin+3);//用向量b赋值给向量a

vector的赋值操作:

1.等号赋值:

1
2
vector<int> v1;
vector<int> v2=v1;

2.assign赋值:

1
2
3
vector<int> v2;
v2.assign(v1.begin(),v1.end());
//区间赋值,注意左闭右开

3.assign赋值(n个元素形式)

1
2
3
vector<int> v2;
v2.assign(10,100);
//将10个100赋值给v2

三、vector的迭代器

vector<数据类型>::iterator 迭代器名=指示的数据

示例:

1
2
3
vector<int> a;
vector<int> ::iterator itbegin = a.begin();
//创建一个迭代器,指向容器的第一个元素

注意:a.end()指向的是容器最后一位数的后一位,当a.begin()=a.end()时容器为空(类似于队列)

​ 在vector中,插入和删除操作会使当前迭代器失效。因为动态管理内存是重新分配空间。

四、vector的基本操作

1.向后插入数据 向量名.push_back(数据)

1
a.push_back(777);

2.从中间插入数据 向量名.insert(向量名.begin()+i,777) ,第i+1个元素为777

1
a.insert(a.begin()+6,777);//第7个元素为777,即在第六个元素后插入777

3.删除末尾数据 向量名.pop_back();

1
a.pop_back();

4.删除数据 向量名.erase(向量名.begin()+i) 删除第i+1个元素

1
a.erase(a.begin()+2);//删除第三个数据

5.删除区间 向量名.erase(向量名.begin()+i,向量名.end()-j) 删除第i+1个元素到第(总个数-j)个元素

1
a.erase(a.begin()+1,a.end()-2);//删除第2个到第3个元素(假设a有5个元素)

6.清空向量 向量名.clear()

1
a.clear();//清空

7.遍历算法for_each

语法:for_each(开始变量,结束变量,欲调用的函数);

注意:应包含algorithm头文件

​ 和sort一样,左闭右开

示例:

1
2
3
4
5
6
7
void print(int t)
{
cout << t << endl;
}

for_each(a.begin(), a.end(), print);
//打印容器中的每一个数

五、vector容器容量和大小的操作

1.判断容器是否为空:empty();

1
2
3
vector<int> v1;
bool a=v1.empty();
//a的值为true

2.获取容器的容量:capacity();

1
2
3
vector<int> v1;
int a=v1.capacity();
//a的值为容器的容量,容量永远大于等于容器的大小

3.获取容器大小:size();

1
2
3
vector<int> v1;
int a=v1.size();
//a的值为0

4.重新指定容器的大小:resize(新的大小,填充的元素);

1
2
3
4
5
vector<int> v1;
v1.resize(10,100);
//重新定义v1的大小为10,多出来的空间用100来填充。
//若v1变小了,则多出来的元素会被删除
//若第二个参数不填,则默认用0来填充

六、vector数据的获取操作

1
2
3
4
5
6
7
8
9
10
11
12
13
vector<int> v1;

//1.使用[] 中括号
v1[1];

//2.使用at()函数
v1.at(1);

//3.使用front()函数获取第一个元素
v1.front();

//4.使用back()函数获取最后一个元素
v1.back();

七、vector互换容器

向量名.swap(欲交换的向量名)

1
2
3
4
vector<int> v1;
vector<int> v2;
v1.swap(v2);
//将v1和v2的元素互换

八、容器预留空间

向量名.reserve(预留的长度);

1
2
3
vector<int> v1;
v1.reserve(1000);
//为v1预留1000的长度