2012-10-29 51 views
20

有具有固定尺寸矢量的矢量,初始化具有升壓固定大小向量的向量分配

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

我想初始化它,以便它具有中的所有元素與一個維向量初始化值(例如1)。

我已經使用升壓分配如下

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

,我已經有了一個編譯錯誤

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

你能告訴我該怎麼做。 在此先感謝

回答

27

這不使用boost::assign但確實你需要:

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

這創建一個載體,其中包含10個載體int,每個載體包含10個ints

17

對於所需的行爲,您不需要使用boost。下面用1價值創造的10vector<int>vector,每個vector<int>10int S:

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

這是第一次的答案貼出來,這是最好的答案,但它既不接受的答案,也不是最先進的投一。嘆。生活是不公平的。 – dbliss

+0

我認爲這是因爲它已經得到了沒有空格的'>'即''':p – krozaine

4

我只是試圖向那些新的C++解釋它。 verctors 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>。希望它更清晰!

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