1
template <class T, class Alloc = allocator<T>> class vector; // 标准模板

vector的引入

vector 是表示大小可以更改的数组(任意类型)的序列容器。

vector 在使用前需要导入 #include <vector> 头文件,并且需要进行 using 声明 using std::vector,才能直接使用 vector 。

说明 vector 保存何种对象的类型,通过将类型放在类模板后面的 <> 中来指定。

  1. vector<T> v1; : 保存类型为 T 对象,默认构造函数 v1 为空。
  2. vector<T> v2(v1) : v2 是 v1 的一个副本。
  3. vector<T> v3(n, i) : v3 包含 n 个值为 i 的元素。
  4. vector<T> v4(n) : v4 包含 10 个 T 类型,但没有指定初始值。

vector的属性

顺序

序列容器中的元素按严格的线性顺序排列,各个元素按其在此序列中的位置进行访问。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <vector>

int main() {
std::vector<int> myVector;

// 在vector中按顺序插入元素
myVector.push_back(10);
myVector.push_back(20);
myVector.push_back(30);

// 遍历vector并按照插入顺序输出元素
for (int i = 0; i < myVector.size(); i++) {
std::cout << myVector[i] << " ";
}

return 0;
}

执行结果:

1
10 20 30

动态数组

允许直接访问序列中的任何元素,甚至通过指针算术,并在序列末尾提供相对快速的元素添加/删除。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <vector>

int main() {
std::vector<int> myVector;

// 向vector添加元素
myVector.push_back(10);
myVector.push_back(20);
myVector.push_back(30);

// 直接访问元素
int element = myVector[1]; // 访问第二个元素,值为20

// 删除元素
myVector.pop_back(); // 移除最后一个元素

// 添加元素
myVector.push_back(40); // 在末尾添加新元素

// 使用迭代器遍历vector
for (std::vector<int>::iterator it = myVector.begin(); it != myVector.end(); ++it) {
std::cout << *it << " ";
}

return 0;
}

执行结果:

1
10 20 40

感知分配

容器使用分配器对象来动态处理其存储需求。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <vector>
#include <memory>

// 自定义分配器类
template <class T>
struct MyAllocator : std::allocator<T> {
// 实现自定义内存分配逻辑
};

int main() {
// 使用自定义分配器创建vector
std::vector<int, MyAllocator<int>> myVector;

myVector.push_back(10);
myVector.push_back(20);
myVector.push_back(30);

// 在这里,我们使用了自定义分配器MyAllocator,它允许你自定义内存分配行为

return 0;
}

成员类型

成员函数

构造函数

析构函数

运算符(=)

迭代器

begin

begin() - 将迭代器返回到开头(公共成员函数)。

  • 将迭代器返回到开头

返回指向 vector 中第一个元素的迭代器,如果容器为空,则返回的迭代器值不应被取消引用。

  • 参数: none

  • 返回值

指向序列容器开头的迭代器。

如果向量对象是 const 限定的,则该函数返回 const_iterator 。否则,它返回一个 iterator

成员类型 iterator 和 const_iterator 是随机访问迭代器类型(分别指向元素和 const 元素)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// vector::begin/end
#include <iostream>
#include <vector>

int main ()
{
std::vector<int> myvector;
for (int i=1; i<=5; i++) myvector.push_back(i);

std::cout << "myvector contains:";
for (std::vector<int>::iterator it = myvector.begin() ; it != myvector.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';

return 0;
}

执行结果:

1
myvector contains: 1 2 3 4 5

end

end()

容量

非成员函数重载

模板专业化