向量输入 C++ 标准模板库 (STL) 及示例

⚡ 智能摘要

向量输入 C++ 是一个来自标准模板库的动态数组,它会随着元素的添加或删除而自动调整自身大小,并将项目存储在连续的内存中,以便程序员可以使用迭代器访问和遍历它们。

  • 📦 动态数组: A C++ 与固定大小的静态数组不同,向量会自动增长或缩小。
  • 🧩 头部和语法: 包含向量头文件,然后声明向量用于存储类型化元素的名称。
  • 🧭 迭代器: begin()、end()、cbegin() 和 cend() 像指针一样在向量元素之间移动。
  • 🛠️ 修饰符: push_back()、insert()、pop_back()、erase() 和 clear() 会改变向量的内容。
  • 📐 起重量: size()、capacity()、max_size()、resize() 和 empty() 报告或调整存储空间。
  • 🤖 人工智能辅助: GitHub Copilot 和类似的 AI 助手可以根据简短的评论生成向量运算。

C++ 矢量 STL

什么是 C++ 向量?

A C++ Vector 是一个能够自动调整自身大小的动态数组。在向 vector 添加或删除元素后,会调整大小。存储由容器自动处理。vector 的元素存储在连续的存储空间中。这允许 C++ 程序员使用迭代器访问和遍历向量元素。

向向量中插入新数据的操作是在向量末尾进行的,这需要一定的时间复杂度。从向量中删除元素的操作则需要恒定的时间复杂度,因为无需调整向量的大小。在向量开头插入或删除元素的操作需要线性时间复杂度。

在使用向量编写代码之前,了解何时应该使用向量作为容器会很有帮助。

何时使用向量?

A C++ 在下列情况下应使用载体:

  • 处理持续变化的数据元素时。
  • 如果在开始之前不知道数据的大小,则向量不需要您设置容器的最大大小。

如何初始化向量 C++

向量的语法 C++ 是:

vector <data-type> name (items)

如上所示,我们从 vector 关键字开始。

  • 数据类型 是要存储在向量中的元素的数据类型。
  • 姓名 是向量或数据元素的名称。
  • 项目 表示向量数据的元素个数。此参数为可选参数。

一旦向量存在,迭代器就提供了一种类似指针的方式来遍历其元素。

迭代器

迭代器的目的是帮助我们访问存储在向量中的元素。它是一个类似于指针的对象。以下是支持的常用迭代器。 C++ 向量:

  • vector::begin(): 它给出一个指向向量第一个元素的迭代器。
  • vector::end(): 它给出了一个指向向量末尾元素的迭代器。
  • 向量::cbegin(): 它与 vector::begin() 相同,但它没有修改元素的功能。
  • 向量::cend(): 它与 vector::end() 相同,但不能修改向量元素。

以下示例填充一个向量,然后使用可变迭代器和常量迭代器遍历该向量。

例子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;
}

输出:

C++ 向量迭代器示例 1 输出

以下是代码截图:

C++ 向量迭代器示例 1 代码

Code 说明:

  1. 在我们的代码中包含 iostream 头文件。它将允许我们从控制台读取和写入。
  2. 在我们的代码中包含矢量头文件。它将允许我们在 C++.
  3. 包含 std 命名空间,以便使用其类和函数而无需调用它。
  4. 调用main()函数,在其中添加程序的逻辑。
  5. { 标记了 main() 函数主体的开始。
  6. 声明一个名为 nums 的向量来存储一组整数。
  7. 创建一个 for 循环来帮助我们遍历向量。该变量将帮助我们遍历向量中的元素,从第 1 个元素到第 5 个元素。
  8. 从后面将元素推送到向量 num 中。对于每次迭代,这会将变量 a 的当前值添加到向量中,即 1 到 5。
  9. 在控制台上打印一些文本。
  10. 使用迭代器变量 a 迭代向量 nums 中的元素,从开头到结尾。请注意,我们使用 vector::begin() 和 vector::end() 迭代器。
  11. 每次迭代时在控制台上打印迭代器变量 a 指向的值。
  12. 在控制台上打印一些文本。 \n 是换行符,将光标移动到新行并从那里打印。
  13. 使用迭代器变量遍历向量 nums 的元素,从开头一直遍历到超过末尾的元素。注意,我们使用的是 vector::cbegin() 和 vector::cend() 迭代器。
  14. 每次迭代时在控制台上打印迭代器变量 a 指向的值。
  15. 如果程序成功运行,主函数应该返回一个值。
  16. main() 函数体结束。

修饰符

修饰符用于改变指定数据类型的含义。以下是 C++:

  • 向量::push_back(): 这个修饰符将元素从后面推。
  • 向量::插入(): 用于将新项目插入到向量的指定位置。
  • 向量::pop_back(): 此修饰符从后面删除矢量元素。
  • 矢量::擦除(): 它用于从指定位置删除一定范围内的元素。
  • 向量::清除(): 它会删除所有矢量元素。

下一个示例按顺序应用这些修饰符,以查看向量如何变化。

例子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();			
}

输出:

C++ 矢量修改器示例 2 输出

以下是代码截图:

C++ 矢量修改器示例 2 代码

Code 说明:

  1. 在我们的代码中包含 iostream 头文件以使用其功能。
  2. 在我们的代码中包含向量头文件以使用其功能。
  3. 包含 std 命名空间以便使用其类而不调用它。
  4. 调用 main() 函数。程序逻辑应添加到其主体内。
  5. main() 函数主体的开始。
  6. 声明一个名为 nums 的向量来存储一些整数值。
  7. 在向量 nums 中存储 5 个元素。每个元素的值均为 1。
  8. 在控制台上打印一些文本。
  9. 使用迭代器变量 a 来迭代向量 nums 的元素。
  10. 每次迭代时在控制台上打印向量 nums 的值。
  11. 将值 2 添加到向量 nums 的末尾。
  12. 声明一个整型变量 n 来存储向量 nums 的大小。
  13. 将向量 nums 的最后一个值与其他文本一起打印。它应该返回 2。
  14. 从向量 nums 中删除最后一个元素。2 将被删除。
  15. 在控制台上打印文本。 \n 将光标移动到新行以在那里打印文本。
  16. 使用迭代器变量 a 来迭代向量 nums 的元素。
  17. 每次迭代时在控制台上打印向量 nums 的值。
  18. 将值 7 插入到向量 nums 的开头。
  19. 将向量 nums 的第一个值与其他文本一起打印。它应该返回 7。
  20. 从向量 nums 中删除所有元素。
  21. 清除所有内容后,打印向量 num 的大小以及其他文本。它应该返回 0。
  22. main() 函数体结束。

容量

使用以下内容 功能 确定向量的容量:

  • 尺寸() – 它返回向量中的元素数量。
  • 最大尺寸() – 它返回向量可以存储的最大元素数量。
  • 容量() – 它返回分配给向量的存储空间大小。
  • 调整大小() – 它会调整容器的大小,使其能够容纳 n 个元素。如果向量的当前大小大于 n,则会从向量中移除末尾的元素。如果向量的当前大小小于 n,则会在向量的末尾添加额外的元素。
  • 空的() 如果向量为空,则返回 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;
}

输出:

C++ 矢量容量示例 3 输出

以下是代码截图:

C++ 矢量容量示例 3 代码

Code 说明:

  1. 在我们的代码中包含 iostream 头文件以使用其功能。
  2. 在我们的代码中包含向量头文件以使用其功能。
  3. 在我们的代码中包含 std 命名空间,以便使用它的类而不调用它。
  4. 调用 main() 函数。程序逻辑应添加在此函数主体内。
  5. 创建一个名为 vector1 的向量来存储整数。
  6. 使用 for 循环创建变量 x,其值从 1 到 10。
  7. 将变量 x 的值推送到向量中。
  8. 将矢量的大小与其他文本一起打印在控制台上。
  9. 在控制台上将向量的容量与其他文本一起打印。
  10. 在控制台上打印向量可容纳的最大项目数以及其他文本。
  11. 调整向量大小以仅容纳 5 个元素。
  12. 将矢量的新尺寸与其他文本一起打印。
  13. 检查向量是否不为空。
  14. 如果向量不为空,则在控制台上打印文本。
  15. 使用 else 语句来说明如果向量为空该做什么。
  16. 如果向量为空,则在控制台上打印的文本。
  17. 程序成功完成后必须返回值。
  18. main() 函数体结束。

常见问题

向量是一种动态数组,它能够自动调整自身大小并知道自身的大小,而内置数组的长度在编译时就已固定。向量会自动管理内存,而原始数组则不会。

使用下标运算符(例如 `nums[0]`)可以快速直接访问索引。`at()` 成员函数(例如 `nums.at(0)`)也能实现同样的功能,但当索引无效时会抛出 `out_of_range` 异常,因此更加安全。

声明一个向量,其元素本身也是向量,例如 vector<vector ... > 网格。您可以使用构造函数或 push_back 行来调整其大小。每个内部向量都可以独立增长,从而为您提供一个灵活、可调整大小的矩阵。

向量将元素存储在连续的内存空间中,并支持快速随机访问;而 `std::list` 是一个双向链表,可以快速地在任意位置插入或删除元素,但不支持直接索引。根据您的访问模式进行选择。

包含算法头文件,并使用起始迭代器和结束迭代器调用 `std::sort`,例如 `sort(nums.begin(), nums.end())`。排序默认为升序;可以传入自定义比较器或更大的值。 ()按降序排列。

是的。向量是一种模板,可以包含任何类型的数据,包括字符串、自定义类,甚至其他向量。在尖括号内声明元素类型,例如 `vector<String>`。或向量。

是的。AI 编码助手可以将简短的提示或注释转换为可运行的向量代码,包括声明、push_back 循环和迭代。务必检查建议的类型、边界和容量处理,因为 AI 可能会忽略项目特定的要求。

是的。 GitHub 副驾驶 它会在你输入时提示向量声明、push_back 和 insert 调用以及迭代器循环。它能很好地处理重复的样板代码,不过你仍然应该在编译前检查索引、调整大小和逻辑。

总结一下这篇文章: