2017-02-05 11 views
3

Когда я компилирую следующий код (используя флаг компилятора -std = C++ 11), я получаю сообщение об ошибке (только): «'vec' is а не класс, пространство имен или перечисление ».Как правильно инициализировать вектор из std :: vector <>

#include <vector> 
#include <iterator> 

int main(){ 

std::vector<int> vec(10,1); 
vec::iterator it; 

return 0; 
} 

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

Насколько я понял, я использовал следующий конструктор (http://en.cppreference.com/w/cpp/container/vector/vector):

vector(size_type count, 
     const T& value, 
     const Allocator& alloc = Allocator()); 

где он говорит, что этот конструктор «Создает контейнер с количеством копий элементов со значением стоимости», так что я ожидал создать вектор с 10 копиями «1», но я, должно быть, неправильно понял что-то, следовательно, проблема.

Где мои рассуждения ошибаются и где происходит ошибка в приведенном выше коде?

ответ

3

Оператор сферы используются для доступа к элементам внутри пространства имен или класса. vec - это не класс, а объект. Вы должны написать std::vector<int>::iterator. Вы также можете вывести тип переменной с помощью auto: auto it = vec.begin() равно std::vector<int>::iterator it = vec.begin()

7

Ваша инициализация вектора в порядке. Но для того, чтобы обратиться к типу итератора, вам нужно использовать тип вектора, а не объект:

std::vector<int>::iterator it;