Hej
Byłbym bardzo wdzięczny, gdyby ktoś mi wytłumaczył co się dzieje w kilku miejscach w kodzie źródłowym set_difference, bo potrzebuję coś takiego przepisać na SCILABA.
A więc kod źródłowy w C++
template<class InputIt1, class InputIt2, class OutputIt>
OutputIt set_difference(InputIt1 first1, InputIt1 last1,
InputIt2 first2, InputIt2 last2,
OutputIt d_first)
{
while (first1 != last1) { //1.
if (first2 == last2) return std::copy(first1, last1, d_first); //2.
if (*first1 < *first2) {
*d_first++ = *first1++;
} else {
if (! (*first2 < *first1)) { //3.
++first1; //4.
}
++first2;
}
}
return d_first;
}
//1.Tutaj chodzi o to, że dopóki indeks first1 nie równa się last1, czy wartość first1 nie równa się wartości last1?
//2.Nie rozumiem tej kwesii, a mianowicie do czego wraca: std::copy(first1, last1, d_first);
//3.Tutaj to w ogóle nie wiem jak interpretować ten ! przed nawiasem
//4.Ogólnie to z tymi gwiazdkami oznacza tak, że z to jest indeks w wektorze, a bez to wartość?
Tu link do strony z której to wziąłem: https://en.cppreference.com/w/cpp/algorithm/set_difference
W sumie to byłbym wdzięczny, gdyby ogólnie ktoś mi wyjaśnił co się po kolei dzieje, bo w sumie ten algorytm nie jest jakiś długi, ale przez brak znajomości składni C++ wiele rzeczy mi się miesza.
Z góry dzięki :D