2011-03-18 102 views
0

我看到一個採訪問題,它被要求用「迭代器」來讀取vector<vector<int>>。我們必須設計必要的界面?C++迭代器問題

這個問題想問一下這個問題很混淆嗎?或者如何回答這種問題。

我可以想象它打算測試C++ STL實現和麪向對象的設計。

+8

你知道迭代器是什麼嗎? – Kenneth 2011-03-18 01:37:30

+0

我想,面試官要求你設計一個迭代器類來訪問向量元素。認爲他正在檢查某人擅長數據結構或STL。 – Mahesh 2011-03-18 02:26:58

+0

@Mahesh - 我想這是第一個問面試官的問題:「你問我要*設計一個迭代器類還是使用一個迭代器類?」這些顯然是不同的問題,旨在識別不同的技能組合。 – 2011-03-18 16:15:04

回答

1

Matrix是3 * 4的尺寸。如果需要的話只能通過迭代器訪問,這應該給你一個想法 - 「請用一個迭代器打印vector<vector<int> >值」

vector< vector<int> > Matrix(3, vector<int>(3,4)); 

for(vector<vector<int>>::iterator i = Matrix.begin(); i != Matrix.end(); ++i) 
{ 
    for(vector<int>::iterator j = (*i).begin(); j != (*i).end(); ++j) 
    { 
     cout << *j << "\t" ; 
    } 
    cout << "\n" ; 
} 
+0

爲什麼不能'i-> begin()'和'i-> end()'? – 2011-03-18 02:59:03

+0

@Fred Larson - 這也是對的。只是這一個在寫作時得到了本能:) – Mahesh 2011-03-18 03:02:21

0

只是爲了好玩,這裏就是我的回答會一直到:

#include <vector> 
#include <iostream> 
#include <iterator> 
#include <algorithm> 

using std::ostream; 
using std::vector; 
using std::cout; 

template <class T> 
ostream& operator<<(ostream&os, const vector<T>& v) 
{ 
    os<<"("; 
    // Can't use std::copy(ostream_iterator) easily due to ADL 
    for(typename vector<T>::const_iterator it = v.begin(); 
     it != v.end(); 
     it++) { 
     os<<(*it)<<", "; 
    } 
    return os<<")"; 
} 

int main() 
{ 
    vector<vector<int> > vv(3, vector<int>(4)); 
    cout << vv << "\n"; 
}