Próbuję dowiedzieć się C++ z odrobiną tle Java i próbuję napisać kod, który zwraca punkt przecięcia dwóch list. Uważam, że mam koncepcję właściwą koncepcyjnie, ale mam problem ze składnią, ponieważ nic nie kompiluje.Początkujący C++: Przekształcenie indeksu składnia do iteratora składni
Oto kod mam wymyślić:
#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;
}
Rzeczy Myślę, że muszę: iterator (jestem pewien sposób mam dostęp do wykazu nie jest poprawna)
Zmodyfikowałem tytuł, aby uczynić go (miejmy nadzieję) bardziej opisowym i wskazał, że jest to problem stosunkowo ogólny, interesujący dla przyszłych użytkowników. Mam nadzieję, że to jest w porządku (proszę, jeśli to nie nastąpi). – jogojapan
Ponieważ jesteś początkującym w C++, warto wspomnieć, że nie powinieneś używać "std :: list" ... kiedykolwiek. (Nie dlatego, że jest coś złego w klasie C++, ale ponieważ jest to straszna struktura danych). Gdy potrzebujesz tylko kontenera, zamiast niego domyślnie jest "wektor". (To by również pozwoliło twojemu kodowi pracować z indeksami zamiast iteratorów) –
jalf
Dobra uwaga. "wektor" jest lepszy w większości przypadków, ale myślę, że dobrze jest znać zalety i wady zarówno "list", jak i "wektorów", a jeśli chcesz napisać dobry kod C++ w pewnym momencie musisz wiedzieć o wskaźnikach/iteratorach. – Ari