这是一些示例代码:
#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); }
1 2 3 163487776 2 3
问题
如果我将f(T t)改为f(T& t),则输出与预期一致.我假设因为我正在使用容器的副本,从技术上讲,我在向量上推回的迭代器与我在main中创建的向量不同.它是否正确?
我注意到的一件事是印刷品(f(v));按预期打印1 2 3但是一旦我将它分配给itervec第一个迭代器变成垃圾,这是否全部依赖于实现?
解决方法
原文地址:https://www.jb51.cc/c/119470.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。