Vector
在C++中,vector
是一个动态数组,它是C++标准模板库(STL)中的一个重要部分。vector
可以看作是一个能够存放任意类型对象的动态数组,它能够自动增长以容纳更多的元素。
vector
是一个类模板,因此它可以用来定义保存任何数据类型的动态数组。你可以使用vector<int>
来定义一个保存整数的动态数组,或者使用vector<string>
来定义一个保存字符串的动态数组。
vector
的主要特性包括:
- 动态大小:
vector
的大小可以根据需要自动增长或缩小。当向vector
中添加元素时,如果当前存储空间不足,vector
会自动分配更多的内存空间。同样,当从vector
中删除元素时,如果内存空间过多,vector
可能会释放一些内存。 - 连续存储:
vector
的元素在内存中是连续存储的,因此可以通过下标来访问vector
中的任何元素,这和普通数组类似。 - 随机访问:由于
vector
的元素是连续存储的,因此可以在常数时间内访问vector
中的任何元素。 - 迭代器支持:
vector
支持迭代器(iterator),这使得你可以使用STL中的算法来操作vector
中的元素。
vector
在C++编程中有许多应用场景,包括处理用户输入、读取文件数据、数学和科学计算、游戏开发、图形处理、缓冲区等。它提供了一种高效、可预测、可扩展的方式来存储和访问一组连续的数据。
迭代器(C++)
在C++中,迭代器(Iterator)是一种设计模式,它使得程序能够顺序地访问一个容器(如vector
、list
、set
、map
等)中的各个元素,而又不需要了解该容器的底层表示。迭代器是一个对象,它知道如何遍历容器,并提供了一种方式来访问容器中的元素。
迭代器的主要操作包括:
*iter
:解引用迭代器,返回迭代器当前指向的元素的引用。iter->member
:通过迭代器访问元素的成员,等同于(*iter).member
。++iter
:将迭代器向前移动到下一个元素。--iter
:将迭代器向后移动到上一个元素(注意:不是所有的迭代器都支持这个操作)。iter1 == iter2
和iter1 != iter2
:比较两个迭代器是否相等或不等。
C++ STL(标准模板库)中的容器都提供了迭代器接口,使得我们可以使用统一的方式来遍历和操作容器中的元素。
以下是一个使用vector
和迭代器的简单示例:
#include <iostream>
#include <vector>
int main() {
std::vector<int> nums = {1, 2, 3, 4, 5};
// 获取vector的迭代器
std::vector<int>::iterator it;
// 遍历vector
for (it = nums.begin(); it != nums.end(); ++it) {
std::cout << *it << " ";
}
// 使用范围for循环(C++11及更高版本)
for (int num : nums) {
std::cout << num << " ";
}
return 0;
}
在上面的示例中,我们首先定义了一个vector<int>
并初始化了它。然后,我们获取了vector
的迭代器,并使用它遍历vector
中的元素。最后,我们还展示了如何使用范围for循环(基于迭代器的语法糖)来简化遍历过程。
注意:C++ STL中的迭代器通常分为五类,包括输入迭代器(Input Iterators)、输出迭代器(Output Iterators)、前向迭代器(Forward Iterators)、双向迭代器(Bidirectional Iterators)和随机访问迭代器(Random Access Iterators)。不同的容器提供的迭代器类型可能不同,它们支持的操作也可能有所不同。例如,vector
和array
提供的是随机访问迭代器,而list
提供的是双向迭代器。