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领域,所以对于定义明确的行为,我认为没有区别. 除了一些检查(“修改”未定义的行为),使用类而不是简单的指针用于向量迭代器有什么好处吗? 解决方法
是.还有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()); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |