加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 10:13:12 所属栏目:百科 来源:网络整理
导读:简单的理论问题:一个简单的指针是std :: vector的有效迭代器类型吗? 对于其他容器(例如list,map),这是不可能的,但对于std :: vector,保证数据是连续的,所以我认为没有理由不这样做. 据我所知,一些实现(例如Visual Studio)对调试版本进行了一些安全检查.但
简单的理论问题:一个简单的指针是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());

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读