C++ 标准模板库 (STL) 中的 Vector 示例
什么是 C++ Vector?
C++ Vector 是一个动态数组,能够自动调整自身大小。当向 vector 添加或从中删除元素后,会自动进行调整。存储由容器自动处理。vector 的元素存储在连续的存储空间中。这使得 C++ 程序员可以使用迭代器访问和遍历 vector 元素。
向 vector 插入新数据是在其末尾进行的。这需要一定时间。从 vector 中删除元素需要常量时间。原因是无需调整 vector 的大小。在 vector 的开头插入或删除元素需要线性时间。
何时使用 Vector?
在以下情况下应使用 C++ vector
- 处理不断变化的数据元素时。
- 如果开始前不知道数据的大小,vector 不需要您设置容器的最大大小。
如何在 C++ 中初始化 Vectors
vector 在 C++ 中的语法是
vector <data-type> name (items)
- 如上所示,我们以 vector 关键字开始。
- data-type 是要存储在 vector 中的元素的**数据类型**。
- name 是 vector 或数据元素的**名称**。
- items 表示 vector 数据的元素数量。此参数是可选的。
迭代器
迭代器的目的是帮助我们访问存储在 vector 中的元素。它是一个类似于指针的对象。以下是 C++ vector 支持的常见迭代器
- vector::begin(): 它提供一个指向 vector 第一个元素的迭代器。
- vector::end(): 它提供一个指向 vector 末尾之后元素的迭代器。
- vector::cbegin(): 它与 vector::begin() 相同,但不能修改元素。
- vector::cend(): 它与 vector::end() 相同,但不能修改 vector 元素。
修饰符
修饰符用于更改指定数据类型的含义。以下是 C++ 中的常见修饰符
- vector::push_back(): 此修饰符从末尾推送元素。
- vector::insert(): 用于在指定位置向 vector 插入新项。
- vector::pop_back(): 此修饰符从末尾删除 vector 元素。
- vector::erase(): 用于从指定位置删除一系列元素。
- vector::clear(): 它删除所有 vector 元素。
示例 1
#include <iostream> #include <vector> using namespace std; int main() { vector<int> nums; for (int a = 1; a <= 5; a++) nums.push_back(a); cout << "Output from begin and end: "; for (auto a = nums.begin(); a != nums.end(); ++a) cout << *a << " "; cout << "\nOutput from cbegin and cend: "; for (auto a = nums.cbegin(); a != nums.cend(); ++a) cout << *a << " "; return 0; }
输出
这是代码的屏幕截图:
代码解释
- 在我们的代码中包含 iostream 头文件。它将允许我们从控制台读取和写入。
- 在我们的代码中包含 vector 头文件。它将允许我们使用 C++ 中的 vector。
- 包含 std 命名空间,以便在不调用它的情况下使用其类和函数。
- 调用 main() 函数,程序逻辑应添加在其内部。
- { 标记 main() 函数主体的开始。
- 声明一个名为 nums 的 vector 来存储一组整数。
- 创建一个 for 循环来帮助我们遍历 vector。该变量将帮助我们从第 1 个到第 5 个元素遍历 vector 元素。
- 从末尾将元素推入 vector num。对于每次迭代,这都会将变量 a 的当前值添加到 vector 中,即 1 到 5。
- 在控制台上打印一些文本
- 使用迭代器变量 a 从开头到末尾之后遍历 vector nums 的元素。注意我们使用的是 vector::begin() 和 vector::end() 迭代器。
- 在每次迭代中,将迭代器变量 an 指向的值打印到控制台。
- 在控制台上打印一些文本。 \n 是一个换行符,将光标移到新行以便从那里打印。
- 使用迭代器变量从开头到末尾之后遍历 vector nums 的元素。注意我们使用的是 vector::cbegin() 和 vector::cend() 迭代器。
- 在每次迭代中,将迭代器变量 a 指向的值打印到控制台。
- 如果程序成功运行,main 函数应返回一个值。
- main() 函数体结束。
示例 2
#include <iostream> #include <vector> using namespace std; int main() { vector<int> nums; nums.assign(5, 1); cout << "Vector contents: "; for (int a = 0; a < nums.size(); a++) cout << nums[a] << " "; nums.push_back(2); int n = nums.size(); cout << "\nLast element: " << nums[n - 1]; nums.pop_back(); cout << "\nVector contents: "; for (int a = 0; a < nums.size(); a++) cout << nums[a] << " "; nums.insert(nums.begin(), 7); cout << "\nFirst element: " << nums[0]; nums.clear(); cout << "\nSize after clear(): " << nums.size(); }
输出
这是代码的屏幕截图:
代码解释
- 包含 iostream 头文件到我们的代码中以使用其函数。
- 在我们的代码中包含 vector 头文件以使用其 函数。
- 包含 std 命名空间,以便在不调用它的情况下使用它的类。
- 调用 main() 函数。程序逻辑应添加到其主体内。
- main() 函数主体的开始。
- 声明一个名为 nums 的 vector 来存储一些整数值。
- 将 5 个元素存储在 vector nums 中。每个元素的值为 1。
- 在控制台上打印一些文本
- 使用迭代器变量 a 来遍历 vector nums 的元素。
- 在每次迭代中,将 vector nums 的值打印到控制台。
- 将值 2 添加到 vector nums 的末尾。
- 声明一个名为 n 的整数变量来存储 vector nums 的大小。
- 将 vector nums 的最后一个值与其它文本一起打印。它应该返回 2。
- 从 vector nums 中删除最后一个元素。2 将被删除。
- 在控制台上打印文本。 \n 将光标移到新行以便在那里打印文本。
- 使用迭代器变量 a 来遍历 vector nums 的元素。
- 在每次迭代中,将 vector nums 的值打印到控制台。
- 将值 7 插入到 vector nums 的开头。
- 将 vector nums 的第一个值与其它文本一起打印。它应该返回 7。
- 删除 vector nums 中的所有元素。
- 清除所有内容后,将 vector num 的大小与其它文本一起打印。它应该返回 0。
- main() 函数体结束。
容量
使用以下函数确定 vector 的容量
- Size() –它返回 vector 中的项目数。
- Max_size() - 它返回 vector 可以存储的最高项目数。
- Capacity() –它返回为 vector 分配的存储空间。
- Resize() –它将容器的大小调整为包含 n 个项目。如果 vector 的当前大小大于 n,则将末尾的项目从 vector 中删除。如果 vector 的当前大小小于 n,则会在 vector 的末尾添加额外的项目。
- Empty() –如果 vector 为空,则返回 true。否则,返回 false。
示例 3
#include <iostream> #include <vector> using namespace std; int main() { vector<int> vector1; for (int x = 1; x <= 10; x++) vector1.push_back(x); cout << "Vector size: " << vector1.size()<< endl; cout << "Vector capacity: " << vector1.capacity() << endl; cout << "Maximum size of vector: " << vector1.max_size()<< endl; vector1.resize(5); cout << "Vector size after resizing: " << vector1.size() << endl; if (vector1.empty() == false) cout << "Vector is not empty"<<endl; else cout << "Vector is empty"<<endl; return 0; }
输出
这是代码的屏幕截图:
代码解释
- 在我们的代码中包含 iostream 头文件以使用其函数。
- 在我们的代码中包含 vector 头文件以使用其函数。
- 包含 std 命名空间到我们的代码中以使用其类而无需调用其名称。
- 调用 main() 函数。程序逻辑应添加到此函数的主体中。
- 创建一个名为 vector1 的 vector 来存储整数。
- 使用 for 循环创建变量 x,其值为 1 到 10。
- 将变量 x 的值推入 vector。
- 在控制台上将 vector 的大小与其它文本一起打印。
- 在控制台上将 vector 的容量与其它文本一起打印。
- 在控制台上将 vector 可以容纳的最大项目数与其它文本一起打印。
- 将 vector 的大小调整为只包含 5 个元素。
- 打印 vector 的新大小以及其它文本。
- 检查 vector 是否不为空。
- 如果 vector 不为空,则在控制台上打印文本。
- 如果 vector 为空,则使用 else 语句说明要做什么。
- 如果 vector 为空,则在控制台上打印的文本。
- 程序在成功完成后应返回值。
- main() 函数主体的结尾。
摘要
- C++ vector 是一个动态数组,在添加或删除元素时可以自动调整自身大小。
- vector 的存储由容器自动处理。
- vector 的元素存储在连续的存储空间中,以便可以通过迭代器访问和遍历。
- 向 vector 插入新数据是在其末尾进行的。
- 向 vector 插入数据需要一定时间。
- 从 vector 中删除元素需要常量时间。
- 在开头插入或删除元素需要线性时间。
- 当处理不断变化的数据元素时,应使用 vector。
- 另外,如果开始前不知道数据的大小,也可以使用 vector。