45

具有固定大小的向量的向量,

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>)’

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

4

4 回答 4

88

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

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

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

于 2012-10-29T12:20:37.957 回答
48

您不需要使用boost所需的行为。下面创建了一个vectors 10 vector<int>,每个都vector<int> 包含10 int一个值为 的 s 1

std::vector<std::vector<int>> v(10, std::vector<int>(10, 1));
于 2012-10-29T12:19:25.500 回答
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;
    }

当然,这不是唯一的方法。如果你不添加或删除元素,也可以使用本地容器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 <vector>. 希望它更清楚!

于 2015-03-30T21:14:18.250 回答
0
#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
于 2017-06-30T05:12:28.070 回答