📜  cpp 中的 end vs cend - C++ (1)

📅  最后修改于: 2023-12-03 15:00:03.015000             🧑  作者: Mango

C++ 中的 end() vs cend()

在 C++ 中,有两个特定的函数 end()cend(),它们都用于返回容器的尾迭代器。它们的不同之处在于 end() 返回一个常规迭代器(iterator),而 cend() 返回一个常量迭代器(const_iterator)。

什么是迭代器?

在 C++ 中,迭代器是一种对象,它在容器内部遍历元素。可以将迭代器想象成指向容器内元素的指针。利用迭代器,我们可以访问和修改容器中的元素。所有标准库容器(例如向量,列表和映射)都有迭代器,使我们可以遍历容器中存储的元素。

end()

end() 函数用于返回容器的尾部迭代器(指向容器中最后一个元素后面的位置)。例如,如果我们有一个向量,并且想要遍历它,可以使用 begin()end() 函数来访问向量中的每个元素。

下面是一个示例,展示如何遍历一个向量:

#include <iostream>
#include <vector>

int main()
{
    std::vector<int> myVector {1, 2, 3, 4, 5};

    // 使用迭代器访问每个元素
    for (auto it = myVector.begin(); it != myVector.end(); ++it)
    {
        std::cout << *it << " ";
    }

    return 0;
}

输出结果:

1 2 3 4 5

在上面的示例中,我们使用 begin()end() 函数来遍历向量中的每个元素。注意,我们使用了自增运算符来递增迭代器。

cend()

cend() 函数与 end() 函数非常相似,因为它也返回尾迭代器。但是,与 end() 函数不同的是,cend() 函数返回常量迭代器(const_iterator)。

常量迭代器是指不能用于修改容器中的元素的迭代器。它只能用于访问容器中的元素。这是因为常量迭代器指向的是常量数据,而 const 让我们不能对其进行任何修改。

下面是一个示例,展示如何使用 cend() 函数来遍历一个向量:

#include <iostream>
#include <vector>

int main()
{
    std::vector<int> myVector {1, 2, 3, 4, 5};

    // 使用迭代器访问每个元素
    for (auto it = myVector.begin(); it != myVector.cend(); ++it)
    {
        std::cout << *it << " ";
    }

    return 0;
}

输出结果:

1 2 3 4 5

在上面的示例中,我们使用了 cend() 函数来遍历向量中的每个元素。我们可以看到,我们仍然可以访问元素,但不能修改它们。

总结

使用 end()cend() 函数遍历容器使代码更加模块化,更具可读性。根据需要使用常规迭代器或常量迭代器,以便在遍历容器时能够进行所需的操作。

参考资料