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

rem*_*emo 1 c++ memory-management list stdvector

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

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

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

chr*_*ris 5

根据我可以从代码中推断出的内容,看来您只是想要这样:

std::vector<std::list<int>> neighbors(NRecords, std::list<int>(NNeighbors));
Run Code Online (Sandbox Code Playgroud)

这使用类似于以下内容的构造函数(链接中的#2)

vector(size_type count, value_type value);
Run Code Online (Sandbox Code Playgroud)

在上面的调用中,NRecords是向量将包含的元素数量,第二个参数是一个列表,该列表以相同的方式初始化(NNeighbors从其大小开始),用于向量的每个元素的值。这样可以省去创建具有该大小的向量,然后分别填充它的麻烦。

为了完整起见,您的std::fill通话有几处错误:

  • 首先,beginend是函数,所以你需要括号(begin())。
  • 其次,std::vector当您之前指定包含std::lists 时,要用s 填充它。
  • 接下来,您将传递一个指向值的指针,而不是值本身。
  • 最后,您要在其中动态创建一个临时容器的地址,这是不允许的。不过,您不应该将地址放在第一位。

更正后,可以写成:

std::fill(neighbours.begin(), neighbours.end(), std::list<int>(NNeighbors));
Run Code Online (Sandbox Code Playgroud)