• C++
  • 通俗易懂的 C++ 中 vector 教程

  • @ 2024-12-7 21:28:56

以下是一份通俗易懂的C++中 vector 教程:

1. 什么是 vector

vector 是C++标准模板库(STL)中的一个容器,简单来说,它就像是一个可以自动“变长”的数组。在普通的数组中,一旦定义了大小,就很难改变了,而 vector 能够根据你添加或删除元素的操作,自动调整自身的大小,使用起来非常灵活方便。

例如,你一开始不确定要存储多少个整数,使用 vector 就不用担心数组大小不够用或者浪费空间的问题啦。

2. 包含头文件

要使用 vector,首先需要在代码开头包含对应的头文件,就像这样:

#include <vector>

3. 定义 vector

定义一个 vector 很简单,基本的语法格式如下:

vector<数据类型> 变量名;

比如说,如果你想定义一个用来存储整数的 vector,可以这样写:

vector<int> myVector;  // 这里定义了一个名为myVector的vector,用来存放int类型的元素

你还可以在定义的时候初始化它,给它赋一些初始值,例如:

vector<int> anotherVector = {1, 2, 3};  // 定义并初始化为包含1、2、3这三个整数的vector

或者指定它的初始大小,比如:

vector<double> sizeVector(5);  // 定义了一个能存放5个double类型元素的vector,初始时这5个元素会被默认初始化为0(对于内置类型而言)

4. 向 vector 中添加元素

vector 提供了几种添加元素的方法,常用的是 push_back 函数。它会把元素添加到 vector 的末尾。

vector<int> numbers;
numbers.push_back(5);  // 向numbers这个vector中添加整数5
numbers.push_back(8);  // 再添加整数8,现在numbers里就有两个元素了,分别是5和8

5. 访问 vector 中的元素

可以像访问数组元素一样,使用下标来访问 vector 中的元素,不过要注意下标是从0开始的哦。

vector<int> elements = {10, 20, 30};
cout << elements[0] << endl;  // 输出第一个元素10
cout << elements[1] << endl;  // 输出第二个元素20
// 如果下标超出了vector中元素的个数范围,就会出现错误,所以访问的时候要确保下标合法哦

6. 获取 vector 的大小(元素个数)

使用 size 函数就能知道 vector 里目前有多少个元素啦。

vector<char> characters = {'a', 'b', 'c'};
int size = characters.size();  // 获取characters这个vector的元素个数,这里size的值会是3
cout << "这个vector里有 " << size << " 个元素" << endl;

7. 修改 vector 中的元素

同样通过下标找到要修改的元素,然后直接赋值就可以修改它的值了。

vector<string> words = {"hello", "world"};
words[0] = "hi";  // 把第一个元素从"hello"修改为"hi"
cout << words[0] << endl;  // 现在输出的就是"hi"了

8. 删除 vector 中的元素

有几种不同的方式来删除元素呢。

  • pop_back 函数可以删除 vector 的最后一个元素,比如:
vector<int> values = {1, 2, 3};
values.pop_back();  // 删除最后一个元素3,现在values里就只剩下1和2了
  • 如果想删除指定位置的元素,可以用 erase 函数,不过要注意使用 erase 函数时,后面的元素会往前移动来填补被删除元素的位置哦。例如:
vector<int> nums = {4, 5, 6, 7};
vector<int>::iterator it = nums.begin() + 1;  // 获取指向第二个元素(下标为1)的迭代器
nums.erase(it);  // 删除下标为1的元素(也就是5),现在nums里的元素就是4、6、7了

9. 遍历 vector

有几种常见的方法来遍历 vector,把里面的元素一个个访问到。

  • 使用下标遍历(和访问数组类似):
vector<int> numbersToTraverse = {11, 12, 13};
for (int i = 0; i < numbersToTraverse.size(); i++) {
    cout << numbersToTraverse[i] << " ";
}
// 输出结果就是:11 12 13
  • 使用迭代器遍历(迭代器可以理解为一种指向 vector 中元素的“指针”):
vector<float> floats = {1.1, 2.2, 3.3};
vector<float>::iterator iter;
for (iter = floats.begin(); iter!= floats.end(); iter++) {
    cout << *iter << " ";
}
// 输出结果同样是:1.1 2.2 3.3
  • 在C++ 11及以后的标准中,还可以使用范围 for 循环,这种方式写起来更简洁:
vector<string> names = {"Alice", "Bob", "Charlie"};
for (string name : names) {
    cout << name << " ";
}
// 输出结果就是:Alice Bob Charlie

10. 其他常用操作和注意事项

  • vector 可以存储各种数据类型,不仅仅是内置类型,像自定义的结构体、类等也都可以存放在 vector 里面哦。
  • vector 中的元素很多,频繁地在中间插入或者删除元素可能会比较耗时,因为后面的元素都要移动位置来腾出空间或者填补空缺,所以如果有大量这样的操作需求,要考虑下效率问题啦。

总之,vector 是C++中一个非常实用的容器,掌握好它的基本用法,能让你在处理各种数据集合的时候更加得心应手哦。希望这份教程能帮助你很好地理解和使用 vector

0 条评论

目前还没有评论...