2015-08-13 78 views
1

我想堆疊/垂直連接2D矢量。對於1D向量,我有這樣的事情:在C++中堆疊/連接2D矢量

#include<iostream> 
#include<vector> 

using namespace std; 

int main() 
{ 
    vector< vector<int> > res;//(2,vector<int>(3,0.0)); 

    vector<int>a = {1,1,1}; 
    vector<int>b = {6,6,6}; 

    res.push_back(a); 
    res.push_back(b); 

    for(int i = 0; i < res.size(); i++) 
    { 

     for(int j = 0; j < res[0].size(); j++) 
     { 
      cout << res[i][j] << ","; 
     } 

     cout << endl; 
    } 

    return 0; 
} 

所以所得到的2D向量(矩陣):

1, 1, 1, 
6, 6, 6, 

是矢量a和b的堆疊/垂直級聯版本。現在,我有一個和b是2D向量,而不是一維向量:

vector< vector<int> >a = {{1,2,3}, 
          {2,2,2}}; 

    vector< vector<int> >b = {{4,5,6}, 
          {6,6,6}}; 

我怎麼會去堆積它們變成一個大小爲4的產生矩陣×3:

1, 2, 3, 
2, 2, 2, 
4, 5, 6, 
6, 6, 6, 

因爲,一簡單的push_back()不會。

回答

0

你的意思是以下嗎?

#include <iostream> 
#include <vector> 

int main() 
{ 
    std::vector<std::vector<int>> a = { { 1, 2, 3 }, { 2, 2, 2 } }; 
    std::vector<std::vector<int>> b = { { 4, 5, 6 }, { 6, 6, 6 } }; 
    std::vector<std::vector<int>> res; 

    res = a; 
    res.insert(res.end(), b.begin(), b.end()); 

    for (const auto &row : res) 
    { 
     for (int x : row) std::cout << x << ' '; 
     std::cout << std::endl; 
    }   
}  

程序輸出是

1 2 3 
2 2 2 
4 5 6 
6 6 6 

您也可以使用push_back。例如

#include <iostream> 
#include <vector> 
#include <functional> 

int main() 
{ 
    std::vector<std::vector<int>> a = { { 1, 2, 3 }, { 2, 2, 2 } }; 
    std::vector<std::vector<int>> b = { { 4, 5, 6 }, { 6, 6, 6 } }; 
    std::vector<std::vector<int>> res; 
    res.reserve(a.size() + b.size()); 

    for (auto &r : { std::cref(a), std::cref(b) }) 
    { 
     for (const auto &row : r.get()) res.push_back(row); 
    }   

    for (const auto &row : res) 
    { 
     for (int x : row) std::cout << x << ' '; 
     std::cout << std::endl; 
    }   
}  

輸出將是與上面相同

1 2 3 
2 2 2 
4 5 6 
6 6 6 

或者你可以寫下面的方式

#include <iostream> 
#include <vector> 
#include <functional> 

int main() 
{ 
    std::vector<std::vector<int>> a = { { 1, 2, 3 }, { 2, 2, 2 } }; 
    std::vector<std::vector<int>> b = { { 4, 5, 6 }, { 6, 6, 6 } }; 
    std::vector<std::vector<int>> res; 
    res.reserve(a.size() + b.size()); 

    for (auto &r : { std::cref(a), std::cref(b) }) 
    { 
     res.insert(res.end(), r.get().begin(), r.get().end());  
    }   

    for (const auto &row : res) 
    { 
     for (int x : row) std::cout << x << ' '; 
     std::cout << std::endl; 
    }   
}  

1 2 3 
2 2 2 
4 5 6 
6 6 6 

也就是說有很多方法做任務。