2013-08-17 6 views
1

Я хочу инициализировать vector из list<int>. Я использовал функцию fill, но мой компилятор показывает ошибку. Пожалуйста, помогите мне в этом направлении.Как я могу инициализировать вектор списков в C++?

std::vector<std::list<int>> neighbors(NRecords); 
std::fill(neighbors.begin,neighbors.end,&std::vector<int>(NNeighbors)); // ERROR 

ERROR: Error 2 error C3867: 'std::vector<_Ty>::begin': function call missing argument list; use '&std::vector<_Ty>::begin' to create a pointer to member ...

ответ

3

Из того, что я могу вывести из кода, кажется, вы просто хотите:

std::vector<std::list<int>> neighbors(NRecords, std::list<int>(NNeighbors)); 

Это использует a constructor (#2 in link), похожее на следующее:

vector(size_type count, value_type value); 

В приведенном выше вызове NRecords - это число элементов, которое вектор будет содержать, и второй аргумент, список, который инициализируется таким же образом (он начинается с NNeighbors в качестве его размера) используется для значения каждого из элементов вектора. Это позволяет создать вектор с размером, а затем заполнить его отдельно.

Для полноты, у вас есть пара вещей неправильно с std::fill вызова:

  • Во-первых, begin и end являются функциями, так что вам нужно круглые скобки (begin()).
  • Во-вторых, вы заполняете его std::vector с, когда вы указали ранее, что оно содержит std::list s.
  • Затем вы передаете указатель на значение вместо самого значения.
  • Наконец, вы берете адрес временного контейнера, который вы создаете на лету там, что запрещено. Однако вы не должны брать адрес, в первую очередь.

Исправлено, это можно записать в виде:

std::fill(neighbours.begin(), neighbours.end(), std::list<int>(NNeighbors)); 
+0

Спасибо на самом деле. Не могли бы вы дать мне ссылку на синтаксис. Для меня кажется очень сложным из прототипа функции, чтобы понять это. – remo

+0

@RezaMortazavi, я обновил ответ, чтобы объяснить его более подробно. – chris

+0

Благодарим вас за помощь – remo

2

neighbors.begin должен быть neighbors.begin()

neighbors.end должен быть neighbors.end()

std::fill(neighbors.begin(),neighbors.end(),std::list<int>(NNeighbors)); 
1

конструктор Использование std::vector «s согласно сообщению Криса

или еще:

std::fill(neighbors.begin(),neighbors.end(),std::list<int>(NNeighbors));

0

Если я прочитал ваш код правильно, вы просто хотите, чтобы объявить вектор списков. я получил эту работу в моем главном файле, но не могу понять, , как сделать это в качестве частного члена класса .....

vector< list <string>> hashTable(1373); 
Смежные вопросы