vector的用法

C++ 中 vector 的用法

在C++编程中,vector 是一个非常重要且常用的容器。它是标准模板库(STL)的一部分,提供了动态数组的功能,可以根据需要自动调整其大小。本文将详细介绍 vector 的用法,包括其基本操作、常用方法以及一些高级用法。

什么是 vector

vector 是一个动态数组,它可以在运行时根据需要自动扩展或收缩。与普通数组不同,vector 的大小不是固定的。它提供了一些方便的函数来管理存储和访问元素。

引入 vector

在使用 vector 之前,需要包含头文件 <vector>

1
#include <vector>

同时,为了方便使用标准库的功能,可以加入以下命名空间声明:

1
using namespace std;

一、vector 的初始化

可以有五种方式,举例如下:

  1. vector<int> a(10);

    • 定义了 10 个整型元素的向量,但没有给出初值,其值是不确定的。
  2. vector<int> a(10, 1);

    • 定义了 10 个整型元素的向量,且给出每个元素的初值为 1。
  3. vector<int> a(b);

    • 用 b 向量来创建 a 向量,整体复制赋值。
  4. vector<int> a(b.begin(), b.begin() + 3);

    • 定义了 a 的值为 b 中第 0 个到第 2 个(共 3 个)元素。
  5. 从数组中获得初值:

    1
    2
    int b[7] = {1, 2, 3, 4, 5, 9, 8};
    vector<int> a(b, b + 7);

二、vector 对象的几个重要操作

  1. a.assign(b.begin(), b.begin() + 3);

    • 将 b 的 0 ~ 2 个元素构成的向量赋给 a。
  2. a.assign(4, 2);

    • 使 a 只含 4 个元素,且每个元素为 2。
  3. a.back();

    • 返回 a 的最后一个元素。
  4. a.front();

    • 返回 a 的第一个元素。
  5. a[i];

    • 返回 a 的第 i 个元素,当且仅当 a[i] 存在。
  6. a.clear();

    • 清空 a 中的元素。
  7. a.empty();

    • 判断 a 是否为空,空则返回 true,不空则返回 false。
  8. a.pop_back();

    • 删除 a 向量的最后一个元素。
  9. a.erase(a.begin() + 1, a.begin() + 3);

    • 删除 a 中第 1 个到第 2 个元素。
  10. a.push_back(5);

    • 在 a 的最后一个位置插入一个元素,值为 5。
  11. a.insert(a.begin() + 1, 5);

    • 在 a 的第 1 个位置插入数值 5。
  12. a.insert(a.begin() + 1, 3, 5);

    • 在 a 的第 1 个位置插入 3 个值为 5 的元素。
  13. a.insert(a.begin() + 1, b + 3, b + 6);

    • 在 a 的第 1 个位置插入 b 的第 3 个到第 5 个元素。
  14. a.size();

    • 返回 a 中元素的个数。
  15. a.capacity();

    • 返回 a 在内存中总共可以容纳的元素个数。
  16. a.resize(10);

    • 将 a 的现有元素个数调整至 10 个,多则删,少则补,其值随机。
  17. a.resize(10, 2);

    • 将 a 的现有元素个数调整至 10 个,多则删,少则补,其值为 2。
  18. a.reserve(100);

    • 将 a 的容量扩充至 100。
  19. a.swap(b);

    • 将 a 中的元素和 b 中的元素进行整体交换。
  20. a == b;

    • 比较两个向量是否相等,向量的比较操作还有 !=, >=, <=, >, <

三、顺序访问 vector 的几种方式

  1. 向向量 a 中添加元素:

    1
    2
    3
    vector<int> a;
    for (int i = 0; i < 10; i++)
    a.push_back(i);
  2. 从数组中选择元素向向量中添加:

    1
    2
    3
    4
    int a[6] = {1, 2, 3, 4, 5, 6};
    vector<int> b;
    for (int i = 1; i <= 4; i++)
    b.push_back(a[i]);
  3. 从现有向量中选择元素向向量中添加:

    1
    2
    3
    4
    5
    int a[6] = {1, 2, 3, 4, 5, 6};
    vector<int> b;
    vector<int> c(a, a + 4);
    for (vector<int>::iterator it = c.begin(); it < c.end(); it++)
    b.push_back(*it);
  4. 从文件中读取元素向向量中添加:

    1
    2
    3
    4
    ifstream in("data.txt");
    vector<int> a;
    for (int i; in >> i;)
    a.push_back(i);

四、几种重要的算法

使用时需要包含头文件 <algorithm>

  1. sort(a.begin(), a.end());

    • 对 a 中的元素进行从小到大排列。
  2. reverse(a.begin(), a.end());

    • 对 a 中的元素倒置,但不排序。
  3. copy(a.begin(), a.end(), b.begin() + 1);

    • 把 a 中的元素复制到 b 中,从 b.begin() + 1

    的位置开始。

  4. find(a.begin(), a.end(), 10);

    • 在 a 中查找 10,若存在返回其在向量中的位置。

示例代码

以下是一个综合示例,展示了 vector 的各种基本操作:

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
// 创建和初始化vector
vector<int> v = {1, 2, 3, 4};

// 访问和修改元素
cout << "第一个元素: " << v[0] << endl;
v[1] = 10;
cout << "修改后的第二个元素: " << v.at(1) << endl;

// 添加和删除元素
v.push_back(5);
v.insert(v.begin(), 0);
v.erase(v.begin() + 2);
v.pop_back();

// 遍历vector
cout << "遍历vector: ";
for (int x : v) {
cout << x << " ";
}
cout << endl;

// 使用常用的方法
cout << "vector的大小: " << v.size() << endl;
cout << "vector是否为空: " << (v.empty() ? "是" : "否") << endl;

v.clear();
cout << "清空后vector的大小: " << v.size() << endl;

// 使用算法
vector<int> a = {4, 2, 3, 1};
sort(a.begin(), a.end());
cout << "排序后的vector: ";
for (int x : a) {
cout << x << " ";
}
cout << endl;

reverse(a.begin(), a.end());
cout << "倒置后的vector: ";
for (int x : a) {
cout << x << " ";
}
cout << endl;

return 0;
}

结语

vector 是 C++ 中非常强大的一个容器,它提供了动态数组的功能,能够方便地进行元素的添加、删除和访问。在实际编程中,vector 被广泛应用于各种场景,掌握 vector 的用法对提升 C++ 编程能力非常有帮助。希望这篇文章能够帮助你更好地理解和使用 vector

作者

Xiongyuqi

发布于

2024-08-08

更新于

2024-08-08

许可协议

评论