如何在C ++中初始化列表向量?

时间:2013-08-17 05:16:37

标签: c++ list memory-management stdvector

我想初始化vector list<int>。我使用fill函数,但我的编译器显示错误。请帮助我这个方向。

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

错误:错误2错误C3867:'std :: vector&lt; _Ty&gt; :: begin':函数调用缺少参数列表;使用'&amp; std :: vector&lt; _Ty&gt; :: begin'创建指向成员的指针...

4 个答案:

答案 0 :(得分:4)

从我可以从代码中推断出来,似乎你只是想要这个:

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电话有几处出错:

  • 首先,beginend是函数,因此您需要括号(begin())。
  • 其次,当您之前指定它包含std::vector时,您正在使用std::list填充它。
  • 接下来,您将传递指向值的指针而不是值本身。
  • 最后,您将获取您在那里动态创建的临时容器的地址,这是不允许的。不过,你不应该首先拿地址。

更正后,可以写成:

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

答案 1 :(得分:2)

neighbors.begin应为neighbors.begin()

neighbors.end应为neighbors.end()

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

答案 2 :(得分:1)

根据Chris的帖子

使用std::vector的构造函数

或者:

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

答案 3 :(得分:0)

如果我正确阅读了您的代码,您只需要声明一个列表向量。 我已经让它在我的主文件中工作,但无法弄清楚 如何做一个班级的私人成员.....

vector< list < string >> hashTable(1373);