使用增强分配初始化具有固定大小的矢量矢量

sal*_*oua 31 c++ boost vector repeat assign

有一个固定大小的矢量矢量,

vector<vector<int> > v(10);
Run Code Online (Sandbox Code Playgroud)

我想初始化它,以便它在所有元素中都有一个具有初始化值的一维向量(例如1).

我使用了Boost Assign如下

v= repeat(10,list_of(list_of(1)));
Run Code Online (Sandbox Code Playgroud)

我有一个编译错误

error: no matching function for call to ‘repeat(boost::assign_detail::generic_list<int>)’
Run Code Online (Sandbox Code Playgroud)

你能告诉我怎么做吗?提前致谢

jua*_*nza 61

这不是用,boost::assign但做你需要的:

vector<vector<int>> v(10, vector<int>(10,1));
Run Code Online (Sandbox Code Playgroud)

这将创建一个包含10个向量的向量int,每个向量包含10 个ints.

  • 为什么有'1`? (2认同)
  • @anibey询问有关使用值1初始化所有向量成员的问题.向量构造函数的第二个参数是要复制的值. (2认同)

hmj*_*mjd 33

您不需要使用boost所需的行为.下面创建一个vector10 vector<int>S,其中每个vector<int> 包含10 ints的一个值1:

std::vector<std::vector<int>> v(10, std::vector<int>(10, 1));
Run Code Online (Sandbox Code Playgroud)

  • 这是第一个发布的答案,这是最好的答案,但它既不是公认的答案,也不是最受欢迎的答案.叹.生活不公平. (2认同)

mol*_*ean 6

我将尝试向那些刚接触 C++ 的人解释它。向量向量mat的优点是您可以使用[]运算符直接访问其元素,几乎没有成本。

int n(5), m(8);
vector<vector<int> > mat(n, vector<int>(m));

mat[0][0] =4; //direct assignment OR

for (int i=0;i<n;++i)
    for(int j=0;j<m;++j){
        mat[i][j] = rand() % 10;
    }
Run Code Online (Sandbox Code Playgroud)

当然,这不是唯一的方法。如果不添加或删除元素,也可以使用mat[]仅是指针的本机容器。这是我最喜欢的方式,使用 C++:

int n(5), m(8);
int *matrix[n];
for(int i=0;i<n;++i){
    matrix[i] = new int[m]; //allocating m elements of memory 
    for(int j=0;j<m;++j) matrix[i][j]= rand()%10;
}
Run Code Online (Sandbox Code Playgroud)

这样,您就不必使用#include <vector>. 希望它更清楚!