【问题标题】:Initializing a vector of vectors having a fixed size with boost assign使用 boost assign 初始化具有固定大小的向量的向量
【发布时间】:2012-10-18 18:11:40
【问题描述】:

拥有一个固定大小的向量,

vector<vector<int> > v(10);

我想对其进行初始化,使其在所有元素中都有一个具有初始化值(例如 1)的一维向量。

我使用Boost Assign如下

v = repeat(10,list_of(list_of(1)));

我遇到了编译错误

error: no matching function for call to ‘repeat(boost::assign_detail::generic_list<int>)’

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

【问题讨论】:

    标签: c++ boost vector repeat assign


    【解决方案1】:

    您不需要使用boost 来获得所需的行为。下面创建一个vector10 vector&lt;int&gt;s,每个vector&lt;int&gt; 包含10 ints,其值为1

    std::vector<std::vector<int>> v(10, std::vector<int>(10, 1));
    

    【讨论】:

    • 这是发布的第一个答案,它是最好的答案,但它既不是公认的答案,也不是投票最多的答案。叹。生活是不公平的。
    • 我认为这是因为它有 &gt;&gt;&gt; 之间没有空格:p
    • @dbliss 刚刚查看了编辑历史记录,看来 OP 在上传后就删除了这个答案。也许他之后看到了对方的答案,他已经完成了他的并且不想发布其他人所做的相同的事情(即使他是第一个)。无论如何,这对他来说感觉很糟糕。
    【解决方案2】:

    这不使用boost::assign,但可以满足您的需要:

    vector<vector<int>> v(10, vector<int>(10,1));
    

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

    【讨论】:

    • 为什么会有1
    • @anibey 提出的问题是关于使用值 1 初始化所有向量成员。向量构造函数的第二个参数是要复制的值。
    【解决方案3】:

    我将尝试向 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;
        }
    

    当然这不是唯一的方法。如果你不添加或删除元素,也可以使用原生容器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;
    }
    

    这样,您不必使用#include &lt;vector&gt;。希望它更清楚!

    【讨论】:

      【解决方案4】:
      #include <vector>
      #include <iostream>
      using namespace std;
      
      
      int main(){
          int n; cin >> n;
          vector<vector<int>> v(n);
          //populate
          for(int i=0; i<n; i++){
              for(int j=0; j<n; j++){
                  int number; cin >> number;
                  v[i].push_back(number);
              }
          }
          // display
          for(int i=0; i<n; i++){
              for(int j=0; j<n; j++){
                  cout << v[i][j] << " ";
              }
              cout << endl;
          }
      }
      

      输入:

      4
      11 12 13 14
      21 22 23 24
      31 32 33 34
      41 42 43 44
      

      输出:

      11 12 13 14
      21 22 23 24
      31 32 33 34
      41 42 43 44
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多