2015-08-13 2 views
-2

Я запутался о C++ синтаксис для создания экземпляра итератора, а именно (список),C++ Итератор Синтаксис

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

Что с std::list перед ::iterator, это означает iterator определен в пространстве имен list в std?

Извините, если этот вопрос очевиден или тривиальен, но я, наконец, убедил себя использовать «std» больше, и теперь я нахожу, что некоторый синтаксис немного запутан.

+0

Это конкретный итератор для станда :: списка, поэтому он определен в этой области. Вы не можете назначить итератору для вектора к нему, например (способ, которым вы выполняете итерацию, зависит от структуры данных) – Leeor

+1

Обычно я не говорю об этом, но [RTFM] (http://en.cppreference.com/ ж/CPP/контейнер/список). В этом конкретном случае я не считаю этот комментарий грубым. –

+0

Я прочитал руководство по адресу http://www.cplusplus.com/reference/list/list/. Я просто не знал, когда вам нужно было обращаться к итератору как :: вместо чего-то вроде -> или. – d4r3llo5

ответ

1

iterator является встроенный элемент типа шаблона класса std::list. std - это пространство имен стандартной библиотеки.

Оператор разрешения сферы :: используется для доступа имен пространств имен и классов, в документации (или исходный код) следует обращаться, чтобы получить точное определение названия.


В этом случае iterator является встроенным типом для большинства контейнеров стандартной библиотеки. Он часто также используется для контейнеров, которые смоделированы в стандартной библиотеке, но это не является общим требованием для любого данного класса.

3

std::list<> не является пространством имен, это класс шаблона, а iterator - это тип внутри этого шаблона. Чтобы получить доступ к нему, вы используете двойные двоеточия.

+1

Это класс шаблонов. –

+0

@NeilKirk - Вы имеете в виду класс шаблонов, а не "тип"? Или вы имеете в виду шаблонный класс, а не шаблон? – Amit

+0

'std :: list' - это шаблонный класс. –

8

Это тип члена. Класс std::list шаблона (концептуально) определяются следующим образом:

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

Следовательно, независимо от стандартной реализации библиотеки вы используете, вы знаете, что для некоторого T, std::list<T>::iterator является псевдонимом типа, реализующего список итератора ,

3

std::list - класс шаблона. Высказывание std::list<T>::iterator означает, что у вас есть итератор списка, а не итератор вектора (std::vector<T>::iterator) или любой другой контейнер.

Если вы нашли имя слишком долго вы можете также использовать auto если вы инициализировать итератор:

auto it = myList.begin(); 
0

станд :: Список :: итератор obj_iterator; // Это значит объявить указатель 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 
    }` 
Смежные вопросы