C++ 迭代器语法

C++ Iterator Syntax

我对用于实例化迭代器的 C++ 语法感到困惑,即(对于列表),

std::list<C++ class object>::iterator iterator_name;

::iterator 之前的 std::list 是怎么回事,这是否意味着 iterator 是在 std 中的命名空间 list 中定义的?

抱歉,如果这个问题很明显或微不足道,但我终于说服自己更多地使用 "std",现在我发现一些语法有点混乱。

iterator 是 class 模板 std::list 嵌入成员类型 std 是标准库命名空间。

范围解析运算符::用于访问命名空间和classes中的名称,应查阅文档(或源代码)以获取名称的确切定义。


在这种情况下,iterator 是大多数标准库容器的嵌入式类型。它通常也用于以标准库为模型的容器,但它不是任何给定 class 的一般要求。

std::list<> 不是命名空间,它是模板 class,iterator 是此模板中的类型。要访问它,请使用双冒号。

会员类型std::list 模板 class 的(概念上)定义如下:

template<typename T>
class list {
public:
    using iterator = /* some implementation-dependent type */
};

因此,无论您使用的是哪种标准库实现,您都知道,对于某些 Tstd::list<T>::iterator 是实现列表迭代器的类型的别名。

std::list 是模板 class。说 std::list< T >::iterator 意味着你有一个列表的迭代器而不是向量的迭代器(std::vector< T >::iterator)或任何其他容器。

如果你觉得名字太长你也可以使用auto如果你初始化迭代器:

auto it = myList.begin();

std::list::迭代器obj_iterator; // 意思是声明类型为std::list

的指针obj_iterator
//simple code snippet
    std::list<int> intList; // declaring intList of type std::list<int>
    for (int i = 0; i < 10; ++i) {
        intList.push_back( 1 << i ); 
    }
    std::list<int>::iterator int_iterator;  //declaring pointer int_iterator of type std::list<int>

    for (int_iterator = intList.begin(); int_iterator != intList.end(); ++int_iterator) {
    std::cout << *int_iterator;    // using of int_iterator
    }`