vector基本概念
- vector数据结构和数组非常相似,也称为单端数组。
- vector也是一种顺序容器,在内存中连续排列。
vector与数组的区别
- 数组是静态空间,定义好之后,长度确定。
- vector可以动态扩展。由于其大小(size)可变,常用于数组大小不可知的情况下来替代数组。
vector容器的特点
动态大小
- vector容器的大小可以根据需要进行动态调整。
- 可以在运行时根据实际需求添加或删除元素,而无需在编译时确定容器的大小。
- vector容器会自动处理内存管理。
连续存储
- vector容器中的元素在内存中是连续存储的。
- 可以通过下标来访问容器中的元素,并且支持快速的随机访问。
自动扩容
- 当向vector容器中添加元素时,如果容器的当前大小不足以容纳新元素,容器会自动扩容。
- 扩容是通过重新分配内存并将原有元素复制到新内存空间中来实现的。
- 这种自动扩容的特性使得vector容器能够动态地适应元素的增长。
尾部操作高效
- vector容器中的元素是连续存储的,因此在尾部进行插入和删除操作是高效的。
- 这是因为在尾部插入或删除元素时,不需要移动其他元素,只需调整尾部指针即可。
vector动态扩展的含义
- 并不是在在原空间后面续接新的空间,而是开辟一个更大的空间,将原数据拷贝到新空间,并删除原空间。
vector常用的接口示意
- 迭代器v.begin():起始元素的位置, v.end(): 最后一个元素之后的位置。
- 迭代器v.rbegin():末尾元素的位置, v.rend(): 第一个元素之前的位置。
- front(): 第一个元素,back(): 末尾元素。
- push_back(): 末尾添加元素,pop_back(): 末尾删除元素。
- vector的迭代器是支持随机访问的迭代器,也就是说迭代器可以一下跳好几个。

vector的构造函数
- vector v: 采用模板类实现,默认构造函数。
- vector(v.begin(), v.end()): 将v对象从v.begin()到 v.end()之间的元素拷贝给正在创建的对象,包头不包尾。
- vector(n, elem): 将n个elem拷贝给正在创建的对象。
- vector(const vector &vec): 拷贝构造函数。
#include <iostream>
#include <vector>
using namespace std;
void print_vector(vector<int> &vec)
{
for (vector<int>::iterator it = vec.begin(); it < vec.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
void test01()
{
vector<int> arr1;
arr1.push_back(11);
arr1.push_back(22);
cout << "---------- arr1 ----------";
print_vector(arr1);
vector<int> arr2 {
1, 2, 3, 4};
cout << "---------- arr2 ----------";
print_vector(arr2);
vector<int> arr3(4);
cout << "---------- arr3 ----------";
print_vector(arr3);
vector<int> arr4(5, 3);
cout << "---------- arr4 ----------";
print_vector(arr4);
vector<int> arr5(arr3);
cout << "---------- arr5 ----------";
print_vector(arr5);
vector<int> arr6(arr2.begin(), arr2.end());
cout << "---------- arr6 ----------";
print_vector(arr6);
vector<int> arr7(arr2.rbegin(), arr2.rend());
cout << "---------- arr7 ----------";
print_vector(arr7);
}
int main()
{
test01();
system("pause");
return 0;
}
result:
---------- arr1 ----------11 22
---------- arr2 ----------1 2 3 4
---------- arr3 ----------0 0 0 0
---------- arr4 ----------3 3 3 3 3
---------- arr5 ----------0 0 0 0
---------- arr6 ----------1 2 3 4
---------- arr7 ----------4 3 2 1
vector赋值操作
=重载赋值
- 函数原型 vector& operator=(const vector &vec), 重载等号运算符
assign赋值
- v1.assign(beg迭代器,end迭代器), 将[beg迭代器,end迭代器) 之间的数据拷贝给被赋值的对象。
- v1.assign(n,elem), 将n个elem的数据拷贝给被赋值的对象。
code:
#include <iostream>
#include <vector>
using namespace std;
void print_vector(vector<int>& vec)
{
for (vector<int>::iterator it = vec.begin(); it < vec.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
void test01()
{
vector<int> arr1{
0,1,2,3,4,5,6,7,8,9};
cout << "---------- arr1 ----------" << endl;
print_vector(arr1);
vector<int> arr2;
arr2 = arr1;
cout << "---------- arr2 ----------" << endl;
print_vector(arr2);
arr2.pop_back();
arr2.pop_back();
vector<int> arr3;
arr3.assign(5, 3);
cout << "---------- arr3 ----------" << endl;</