我看到一個採訪問題,它被要求用「迭代器」來讀取vector<vector<int>>
。我們必須設計必要的界面?C++迭代器問題
這個問題想問一下這個問題很混淆嗎?或者如何回答這種問題。
我可以想象它打算測試C++ STL實現和麪向對象的設計。
我看到一個採訪問題,它被要求用「迭代器」來讀取vector<vector<int>>
。我們必須設計必要的界面?C++迭代器問題
這個問題想問一下這個問題很混淆嗎?或者如何回答這種問題。
我可以想象它打算測試C++ STL實現和麪向對象的設計。
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" ;
}
爲什麼不能'i-> begin()'和'i-> end()'? – 2011-03-18 02:59:03
@Fred Larson - 這也是對的。只是這一個在寫作時得到了本能:) – Mahesh 2011-03-18 03:02:21
你會發現這個網站是有用的:http://en.wikipedia.org/wiki/Iterator#C.2B.2B
只是爲了好玩,這裏就是我的回答會一直到:
#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";
}
你知道迭代器是什麼嗎? – Kenneth 2011-03-18 01:37:30
我想,面試官要求你設計一個迭代器類來訪問向量元素。認爲他正在檢查某人擅長數據結構或STL。 – Mahesh 2011-03-18 02:26:58
@Mahesh - 我想這是第一個問面試官的問題:「你問我要*設計一個迭代器類還是使用一個迭代器類?」這些顯然是不同的問題,旨在識別不同的技能組合。 – 2011-03-18 16:15:04