Вот пример кода:
#include
#include
template
std::vector f(T t)
{
std::vector v;
for (auto i = t.begin(); i != t.end(); ++i)
{
v.push_back(i);
}
return v;
}
template
void print(const std::vector& v)
{
for (auto i = v.begin(); i != v.end(); ++i)
{
std::cout << **i << ' ';
}
std::cout << std::endl;
}
int main()
{
std::vector v{1, 2, 3};
print(f(v));
std::vector::iterator> itervec = f(v);
print(itervec);
}
На ideone вывод был:
1 2 3
163487776 2 3
Вопросы
Если я изменю f(T t)
до f(T& t)
результат соответствует ожидаемому. Я предполагаю, что, поскольку я работаю с копиями контейнеров, технически итераторы, которые я отталкиваю от вектора, не совпадают с вектором, который я создал в main. Это правильно? Единственное, что я заметил, это print(f(v));
печатает 1 2 3
, как и ожидалось, но как только я назначаю его itervec
, первый итератор становится мусором, зависит ли это от реализации?