2014-01-30 80 views
1

我正在做一些向量數組的測試,我不知道如何打印它。 這裏是我的代碼:在C++中打印矢量數組

#include <iostream> 
#include <string> 
#include <cstring> 
#include <algorithm> 
#include "vector" 
#include <windows.h> 

using namespace std; 

vector<vector<int>> generateArrays(){ 

vector<vector<int>> cisla; 

for(unsigned int i=1; i < 11; i++){ 
    vector<int> pole; 
    vector<int> pole2; 
    for(unsigned int j=0; j < i*5; j++){ 
     int a = rand(); 
     pole.push_back(a); 
     pole2.push_back(a); 
    } 
    cisla.push_back(pole); 
    cisla.push_back(pole2); 
} 
return cisla; 
} 

vector<vector<int>> arrays = generateArrays(); 


void Print (const vector<int>& arrays){ 
    // function for prinitng arrays 
} 


int main(){ 
    Print(arrays); 
    system("pause"); 
} 

我需要的是一些功能在矢量陣列寫下所有數字。我試圖谷歌它,但沒有代碼爲我工作。

+1

[通用解決方案](http://stackoverflow.com/questions/4850473/pretty-print-c-stl-containers)。 – Jarod42

+0

不要打擾答案,閱讀Joard的鏈接。 – Xarn

回答

2
// requires #include <algorithm> for std::copy 
// requires #include <iterator> for std::ostream_iterator 
void Print(const vector<vector<int>>& arrays, std::ostream& out = std::cout) 
{ 
    for(const auto& array:arrays) { 
     std::copy(array.begin(), array.end(), std::ostream_iterator<int>(out, " ")); 
     out << std::endl; 
    } 
} 
0

您可以使用矢量::迭代器,例如:

vector<vector<int>>::iterator i = arrays.begin(); 
vector<int>::iterator j = *i.begin(); 

for(;i != arrays.end(); ++i) { 
    for(;j != *i.end(); ++j) { 
    std::cout << *j << " "; 
    } 
    std::cout << "\n"; 
} 
+1

我認爲發佈的代碼不會按預期工作,因爲j永遠不會重置爲外部for循環中的* i.begin()。 – duselbaer

+0

在'for'語句的初始化子句中初始化迭代器會更加地道。無論如何,你需要爲外層循環的每次迭代重新初始化'j'。另外,這應該是'i-> begin()'或'(* i).begin()',而不是'* i.begin()'。 –

0

這個怎麼樣?

創建一個流輸出運營商這樣的T載體:

template <typename T> 
std::ostream& operator<<(std::ostream& os, std::vector<T> const & array) 
    bool seenFirst = false; 
    os << "[ "; 
    for (auto const & i : array) 
    { 
     if (!seenFirst) 
     { 
      seenFirst = true; 
      os << i; 
     } 
     else 
     { 
      os << ", " << i; 
     } 
    } 
    os << "]"; 
    return os; 
} 

在你可以用它來std::vector<int>以及爲std::vector< std::vector <int> >這樣結尾:

std::cout << arrays; 
0

如果你有Print原型如圖所示 然後,

void Print (const vector<int>& arrays){ 
    for(auto x:arrays) 
    std::cout << x <<" "; 
} 

int main(){ 

    for(const auto& array:arrays) 
    Print(array); 

    system("pause"); 
} 

否則,你可以像

void Print (const vector<vector<int>>& arrays){ 

    for(const auto& array:arrays) 
    for(auto x:array) 
    std::cout << x <<" "; 
} 
0

當你有std::vector<std::vector<int>>那麼函數會像

void Print(const std::vector<std::vector<int>> &arrays) 
{ 
    for (const std::vector<int> &v : arrays) 
    { 
     for (int x : v) std::cout << x << ' '; // you can include std::setw here 
     std::cout << std::endl; 
    } 
} 

在一個函數中結合了或者,如果你需要輸出僅std::vector<int>那麼它會看起來

void Print(const std::vector<int> &arrays) 
{ 
    for (int x : arrays) std::cout << x << ' '; // you can include std::setw here 
} 

如果你的編譯器不支持基於範圍的語句,那麼你可以使用例如標準算法的std ::複製。

void Print(const std::vector<int> &arrays) 
{ 
    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " ")); 
} 

或者你可以使用一個普通的循環

void Print(const std::vector<int> &arrays) 
{ 
    for (std::vector<int>::size_type i = 0; i < arrays.size(); i++) 
    {   
     std::cout << arrays[i] << ' '; // you can include std::setw here 
    } 
} 

或用迭代器

void Print(const std::vector<int> &arrays) 
{ 
    for (auto it = arrays.begin(); it != arrays.end(); ++it) 
    {   
     std::cout << *it << ' '; // you can include std::setw here 
    } 
} 
0
void Print (const vector<int>& arrays){ 
    for (std::vector<int>::iterator it = arrays.begin() ; 
      it != arrays.end(); 
      ++it) 
    std::cout << ' ' << *it; 
} 
0
#include <algorithm> 

vector<vector<int>>::iterator it = arrays.begin(); 
while (!(it == arrays.end()) { 
    std::copy((*it).begin(), (*it).end(), 
            std::ostream_iterator<int>(std::cout, ",")); 
    ++it; 
} 
0

在C++ 11``

for (auto i = path.begin(); i != path.end(); ++i) 
std::cout << *i << ' '; 

for(int i=0; i<path.size(); ++i) 
std::cout << path[i] << ' ';