我想學習一點Java背景的C++,並試圖編寫返回兩個列表交集的代碼。我相信我在概念上有正確的想法,但由於沒有任何內容正在編譯,因此遇到了語法問題。Beginner C++:將索引語法轉換爲迭代器語法
下面的代碼我想出了:
#include <iostream>
using namespace std;
#include <list>
template <typename Object>
list<Object> intersection(const list<Object> & L1, const list<Object> & L2){
std::list<Object> result;
int pos1 = 0;
int pos2 = 0;
while (pos1 < L1.size() && pos2 < L2.size()) {
if (L1[pos1] > L1[pos2]) {
pos1++;
} else if (L2[pos2] > L1[pos1]) {
pos2++;
} else {
result.push_back(L2[pos2]);
pos1++;
pos2++;
}
}
return result;
}
事情我想我需要: 一個iterator(我敢肯定,我在訪問列表的方式是不正確的)
我修改了標題以使其具有更好的描述性,並指出這是一個相對普遍的問題,對於未來的用戶很有意思。我希望這是好的(如果不是,請回復)。 – jogojapan 2013-03-04 08:16:51
既然你是C++的初學者,可能值得一提的是你不應該真的使用'std :: list' ......永遠。 (不是因爲C++類有什麼問題,而是因爲它是一個可怕的數據結構)。當你只需要一個容器時,默認爲'vector'而不是。 (這也可以讓你的代碼使用索引而不是迭代器) –
jalf
2013-03-04 08:21:02
好點。 'vector'在大多數情況下都更好,但我認爲知道'list'和'vectors'的優點和缺點是很好的,如果你想在某些時候編寫好的C++代碼,你需要知道指針/迭代器。 – Ari 2013-03-04 08:29:37