📜  从头到尾迭代向量 - C++ (1)

📅  最后修改于: 2023-12-03 14:49:23.008000             🧑  作者: Mango

从头到尾迭代向量 - C++

在C++中,向量是一种非常有用的数据结构。 它是一种动态数组,可以在运行时动态分配空间。 向量类似于数组,但具有许多附加功能,例如自动调整大小,以适应添加和删除元素。

在本文中,我们将介绍如何使用迭代器从头到尾迭代向量以及使用C++标准库提供的算法。

迭代器

迭代器是一种抽象化的指针,可以遍历容器中的元素。 C++ STL提供了五种类型的迭代器。

输入迭代器

输入迭代器允许使用迭代器读取容器中的元素。 它们仅适用于单个方向的顺序访问,因此只允许递增操作。

// 示例代码,输入迭代器用于读取容器中的元素
std::vector<int> vec = {1, 2, 3, 4, 5};
std::vector<int>::const_iterator it = vec.cbegin();

while (it != vec.cend()) {
    std::cout << *(it++) << " ";
}
输出迭代器

输出迭代器允许使用迭代器向容器中写入元素。 它们仅适用于单个方向的顺序访问,因此只允许递增操作。

// 示例代码,输出迭代器用于向容器中写入元素
std::vector<int> vec;
std::vector<int>::iterator it = std::back_inserter(vec);

for (int i = 1; i <= 5; i++) {
    *(it++) = i;
}

for (int n : vec) {
    std::cout << n << " ";
}
前向迭代器

前向迭代器允许使用迭代器向前遍历容器中的元素。 它们仅适用于单个方向的顺序访问,因此只允许递增操作。

// 示例代码,前向迭代器遍历容器中的元素
std::forward_list<int> flist = {1, 2, 3, 4, 5};
std::forward_list<int>::iterator it = flist.begin();

while (it != flist.end()) {
    std::cout << *(it++) << " ";
}
双向迭代器

双向迭代器允许使用迭代器向前和向后遍历容器中的元素。 它们允许递增和递减操作。

// 示例代码,双向迭代器向前和向后遍历容器中的元素
std::list<int> list = {1, 2, 3, 4, 5};
std::list<int>::iterator it = list.begin();

while (it != list.end()) {
    std::cout << *(it++) << " ";
}

--it;

while (it != list.begin()) {
    std::cout << *(--it) << " ";
}
随机访问迭代器

随机访问迭代器最为强大,可以任意遍历容器中的元素。 它们允许递增、递减、加、减和跳跃操作。

// 示例代码,随机访问迭代器遍历容器中的元素
std::vector<int> vec = {1, 2, 3, 4, 5};
std::vector<int>::iterator it = vec.begin();

for (int i = 0; i < vec.size(); i++) {
    std::cout << *(it + i) << " ";
}
从头到尾迭代向量

向量是一种支持随机访问迭代器的容器类型,因此可以使用递增、递减、加、减和跳跃操作。 下面是从头到尾迭代向量的示例代码。

// 示例代码,从头到尾迭代向量
std::vector<int> vec = {1, 2, 3, 4, 5};

for (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
    std::cout << *it << " ";
}
使用C++标准库中的算法

C++标准库中提供了许多有用的算法,可以应用于各种容器类型,包括向量。 这些算法通常接受迭代器作为参数,并执行某种操作。 下面是使用C++标准库中的算法遍历向量的示例代码。

// 示例代码,使用C++标准库中的算法遍历向量
std::vector<int> vec = {1, 2, 3, 4, 5};

std::for_each(vec.begin(), vec.end(), [](auto n) { std::cout << n << " "; });
结论

在C++中,向量是一种非常有用的数据结构,可以在运行时动态分配空间,并且具有许多有用的功能。 遍历向量的最简单的方法是使用迭代器,可以使用各种类型的迭代器。 此外,C++标准库中提供了许多有用的算法,可以应用于向量以及其他容器类型。