c – std :: vector :: iterator可以只是T *吗?

c – std :: vector :: iterator可以只是T *吗?,第1张

概述简单的理论问题:一个简单的指针是std :: vector的有效迭代器类型吗? 对于其他容器(例如list,map),这是不可能的,但对于std :: vector,保证数据是连续的,所以我认为没有理由不这样做. 据我所知,一些实现(例如Visual Studio)对调试版本进行了一些安全检查.但这是在UB领域,所以对于定义明确的行为,我认为没有区别. 除了一些检查(“修改”未定义的行为),使用类 简单的理论问题:一个简单的指针是std :: vector的有效迭代器类型吗?

对于其他容器(例如List,map),这是不可能的,但对于std :: vector,保证数据是连续的,所以我认为没有理由不这样做.

据我所知,一些实现(例如Visual Studio)对调试版本进行了一些安全检查.但这是在UB领域,所以对于定义明确的行为,我认为没有区别.

除了一些检查(“修改”未定义的行为),使用类而不是简单的指针用于向量迭代器有什么好处吗?

解决方法

would a simple pointer be a valID iterator type for std::vector?

是.还有std :: basic_string和std :: array.

are there any advantages of using a class instead of a simple pointer for vector iterators?

它提供了一些额外的类型安全性,因此如下所示的逻辑错误无法编译:

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());
总结

以上是内存溢出为你收集整理的c – std :: vector :: iterator可以只是T *吗?全部内容,希望文章能够帮你解决c – std :: vector :: iterator可以只是T *吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1218432.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存