Menu
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

C++ 教程

C++ 主页 C++ 简介 C++ 入门 C++ 语法 C++ 输出 C++ 注释 C++ 变量 C++ 用户输入 C++ 数据类型 C++ 运算符 C++ 字符串 C++ 数学 C++ 布尔值 C++ if...Else C++ Switch C++ While 循环 C++ For 循环 C++ Break/Continue C++ 数组 C++ 结构体 C++ 枚举 C++ 引用 C++ 指针

C++ 函数

C++ 函数 C++ 函数参数 C++ 函数重载 C++ 范围 C++ 递归

C++ 类

C++ OOP C++ 类/对象 C++ 类方法 C++ 构造函数 C++ 访问修饰符 C++ 封装 C++ 继承 C++ 多态 C++ 文件 C++ 异常 C++ 日期

C++ 数据结构

C++ 数据结构 & STL C++ 向量 C++ 列表 C++ 栈 C++ 队列 C++ 双端队列 C++ 集合 C++ 映射 C++ 迭代器 C++ 算法

C++ 如何操作

C++ 相加两个数字 C++ 随机数

C++ 参考

C++ 参考 C++ 关键字 C++ <iostream> C++ <fstream> C++ <cmath> C++ <string> C++ <cstring> C++ <ctime> C++ <vector> C++ <algorithm>

C++ 例子

C++ 例子 C++ 现实生活中的例子 C++ 编译器 C++ 练习 C++ 测验 C++ 证书


C++ 向量


C++ 向量

C++ 中的向量类似于可调整大小的 数组.

向量和数组都是用于存储相同数据 类型 的多个元素的数据结构。

数组和向量之间的区别在于,数组的大小不可修改(无法添加或删除数组中的元素)。但是,向量可以根据需要增大或缩小其大小。

若要使用向量,必须包含 <vector> 头文件

// 包含向量库
#include <vector>

创建向量

若要创建向量,请使用 vector 关键字,并在尖括号 <> 中指定它应存储的值的 类型,然后指定向量的名称,例如:vector<type> vectorName

示例

// 创建一个名为 cars 的向量,用于存储字符串
vector<string> cars;

如果要声明时添加元素,请将它们放在花括号 {} 中,以逗号分隔,就像数组一样

示例

// 创建一个名为 cars 的向量,用于存储字符串
vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};

// 打印向量元素
for (string car : cars) {
  cout << car << "\n";
}
尝试一下 »

注意:向量的类型(我们示例中的 string)在声明后无法更改。


访问向量

可以通过在方括号 [] 内引用索引号来访问向量元素。

向量与数组一样,也是从 0 开始索引的,这意味着 [0] 是第一个元素,[1] 是第二个元素,依此类推

示例

// 创建一个名为 cars 的向量,用于存储字符串
vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};

// 获取第一个元素
cout << cars[0];  // 输出 Volvo

// 获取第二个元素
cout << cars[1];  // 输出 BMW
尝试一下 »

使用向量库的一个好处是它包含许多有用的函数。例如,可以使用 .front().back() 函数访问向量的第一个或最后一个元素

示例

// 创建一个名为 cars 的向量,用于存储字符串
vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};

// 获取第一个元素
cout << cars.front();

// 获取最后一个元素
cout << cars.back();
尝试一下 »

若要访问指定索引处的元素,可以使用 .at() 函数并指定索引号

示例

// 创建一个名为 cars 的向量,用于存储字符串
vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};

// 获取第二个元素
cout << cars.at(1);

// 获取第三个元素
cout << cars.at(2);
尝试一下 »

注意:与方括号 [] 相比,.at() 函数通常更受欢迎,因为它可以在发生错误时通知您。

例如,如果元素超出范围

示例

// 创建一个名为 cars 的向量,用于存储字符串
vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};

// 尝试访问不存在的元素(会抛出错误消息)
cout << cars.at(6);
尝试一下 »


更改向量元素

若要更改特定元素的值,可以引用索引号

示例

vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};

// 更改第一个元素的值
cars[0] = "Opel";

cout << cars[0];  // 现在输出 Opel 而不是 Volvo
尝试一下 »

但是,使用 .at() 函数更安全

示例

vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};

// 更改第一个元素的值
cars.at(0) = "Opel";

cout << cars.at(0);  // 现在输出 Opel 而不是 Volvo
尝试一下 »

添加向量元素

向量和数组之间最大的区别是向量可以动态增长。这意味着可以向向量添加或删除元素。

若要向向量添加元素,可以使用 .push_back() 函数,该函数会在向量末尾添加一个元素

示例

vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
cars.push_back("Tesla");
尝试一下 »

可以添加任意数量的元素

示例

vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
cars.push_back("Tesla");
cars.push_back("VW");
cars.push_back("Mitsubishi");
cars.push_back("Mini");
尝试一下 »

删除向量元素

若要从向量中删除元素,可以使用 .pop_back() 函数,该函数会从向量末尾删除一个元素

示例

vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
cars.pop_back();
尝试一下 »

注意:元素通常只从向量的末尾添加和删除。如果需要从两端添加或删除元素,通常最好使用 双端队列 而不是向量。


向量大小

若要了解向量有多少元素,请使用 .size() 函数

示例

vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
cout << cars.size();  // 输出 4
尝试一下 »

检查向量是否为空

还有一个函数可以确定向量是否为空。

如果向量为空,.empty() 函数会返回 1true),如果它包含一个或多个元素,则会返回 0false

示例

vector<string> cars;
cout << cars.empty();  // 输出 1(向量为空)
尝试一下 »

示例

vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
cout << cars.empty();  // 输出 0(不为空)
尝试一下 »

循环遍历向量

可以使用 for 循环结合 .size() 函数循环遍历向量元素

示例

vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};

for (int i = 0; i < cars.size(); i++) {
  cout << cars[i] << "\n";
}
尝试一下 »

您还可以使用 for-each 循环(在 C++ 版本 11(2011)中引入),它更简洁、更易读

示例

vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};

for (string car : cars) {
  cout << car << "\n";
}
尝试一下 »

提示:还可以使用 迭代器 循环遍历向量,您将在后面的章节中详细了解。


完整向量参考

有关向量函数的完整参考,请访问我们的 C++ 向量参考



×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.