Ecco qualche esempio di codice:Il passaggio dei contenitori per valore invalida gli iteratori?
#include <iostream>
#include <vector>
template <typename T>
std::vector<typename T::iterator> f(T t)
{
std::vector<typename T::iterator> v;
for (auto i = t.begin(); i != t.end(); ++i)
{
v.push_back(i);
}
return v;
}
template <typename T>
void print(const std::vector<T>& v)
{
for (auto i = v.begin(); i != v.end(); ++i)
{
std::cout << **i << ' ';
}
std::cout << std::endl;
}
int main()
{
std::vector<int> v{1, 2, 3};
print(f(v));
std::vector<std::vector<int>::iterator> itervec = f(v);
print(itervec);
}
Sulla ideone l'uscita era:
1 2 3
163487776 2 3
Domande
Se cambio f(T t)
-f(T& t)
l'uscita è come previsto. Sto assumendo perché sto lavorando con copie di contenitori, tecnicamente gli iteratori che sto spingendo indietro sul vettore non sono gli stessi del vettore che ho creato in main. È corretto? L'unica cosa che ho notato è print(f(v));
stampe 1 2 3
come previsto, ma non appena lo assegno a itervec
il primo iteratore diventa spazzatura, è tutta questa implementazione dipendente?