简单的理论问题:简单的指针会成为有效的迭代器类型std::vector
吗?
对于其他容器(例如列表,地图),这是不可能的,但是对于std::vector
所保存的数据,保证是连续的,因此我看不出为什么不这样做。
据我所知,某些实现(例如Visual Studio)会在调试版本上进行一些安全的检查。但这是在UB领土内,因此对于明确定义的行为,我认为没有区别。
除了进行某些检查(“修改”未定义的行为)外,对于矢量迭代器,使用类而不是简单的指针还有什么优点?
一个简单的指针将是有效的迭代器类型
std::vector
吗?
是的。并且也适用于std::basic_string
和std::array
。
对于矢量迭代器,使用类而不是简单的指针有什么好处吗?
它提供了一些附加的类型安全性,因此不会编译以下逻辑错误:
std::vector<int> v;
int i=0;
int* p = &i;
v.insert(p, 1); // oops, not an iterator!
delete v.begin(); // oops!
std::string s;
std::vector<char> v;
// compiles if string and vector both use pointers for iterators:
v.insert(s.begin(), '?');
std::array<char, 2> a;
// compiles if array and vector both use pointers for iterators:
v.erase(a.begin());
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句