2015-12-02 78 views
0

我试图复制二维向量中的一维向量的内容。如何在二维向量中复制向量

我试着使用的push_back()

vector<int> v; 
vector<vector<int> > twov; 

for (int i = 0; i < v.size(); i++) 
    twov.push_back(v[i]) 

但是,当然,我会收到以下错误:

error: reference to type 'const value_type' (aka 'const std::__1::vector<int, std::__1::allocator<int> >') could not bind to an lvalue of type 'value_type' 
    (aka 'int') 

你能帮助我吗?

感谢提前:)

+1

避免它,有一个适配器通过引用包装该向量,并提供(常量和非常量)运算符'T&operator()(std :: size_t x,std :: size_t y)' –

+0

我不真的知道如何去做。我是新的C++。谢谢。 – Elena

+0

@Elena请发布'twov'和'v'的声明,而不是我们试图解析错误信息。 – PaulMcKenzie

回答

1

你必须决定的第一件事是应该如何的v元素被分配到twov

vN元素。预计N等于N1 x N2,其中N1是行数和N2的列数?

如果答案是肯定的,您可以创建twov并在其中以N1 1-D vectors开头。

size_t N = v.size(); 
size_t N1 = <Some value>; 
size_t N2 = N/N1; 
assert(N1*N2 == N); 

// Create twov with the appropriate elements. 
vector<vector<int> > twov(N1, vector<int>(N2)); 

// Now copy the elements from v to twov 
for (size_t i = 0; i < N1; ++i) 
{ 
    for (size_t j = 0; j < N2; ++j) 
    { 
     twov[i][j] = v[i*N2+j]; 
    } 
} 

如果twov结构不是那样干净上面,你就必须拿出不同的逻辑来复制的v的元素twov

+0

非常感谢:D – Elena