2015-05-02 222 views
0

我代表陣列的集合如下的一維集合:迭代陣列

std::vector<int> v = {3, 0, 1, 2, 1, 3, 1, 4, 2, 5, 6 }; 

此數組代表4個陣列是{0,1,2}{3}{4},和{5,6}的集合。因此,v首先包含數組的大小,然後是數組內容。

我想遍歷數組,即遍歷每個數組的每個元素並以某種方式處理它們。如果這是說向量的載體,人們可以簡單地做:

std::vector<std::vector<int> > v; 
v.emplace_back(std::vector<int>({ 0, 1, 2 })); 
v.emplace_back(std::vector<int>({ 3 })); 
v.emplace_back(std::vector<int>({ 4 })); 
v.emplace_back(std::vector<int>({ 5, 6 })); 

for (std::size_t i = 0; i < v.size(); ++i) 
{ 
    for (std::size_t j = 0; j < v[i].size(); ++j) 
    { 
     std::cout << v[i][j] << " "; 
    } 
    std::cout << "\n"; 
} 

但是我怎麼實現與方案相同的第一個描述?我覺得自己太想了,而且我只能想出一些太複雜的方法。有一些簡潔的解決方案嗎?

回答

1

的解決方案似乎並沒有要複雜得多比這將是一個2D矢量:

std::vector<int>::iterator it = std::begin(v); 

while (it != std::end(v)) { 
    int n = *it; 
    for (int j = 0; j < n; ++j) { 
     ++it; 
     std::cout << *it << ' '; 
    } 
    std::cout << '\n'; 
    ++it; 
} 

我們只是走it通過向量。變量n告訴我們每行需要打印多少個元素。

1

假設您已經構建了vector,請嘗試迭代器!

std::vector<int>::iterator i = v.begin(); 
while(i != v.end()){ 
    size_t n = *i; 
    for(size_t j = 0; j < n; j++) 
     std::cout << *(++i) << " "; 
    std::cout << std::endl; 
    ++i; 
}