bol*_*lov 3 c++ optimization iterator vector
简单的理论问题:一个简单的指针是一个有效的迭代器类型std::vector吗?
对于其他容器(例如列表,映射),这是不可能的,但对于std::vector保持的数据保证是连续的,所以我认为没有理由不这样做.
据我所知,一些实现(例如Visual Studio)对调试版本进行了一些安全检查.但这是在UB领域,所以对于定义明确的行为,我认为没有区别.
除了一些检查("修改"未定义的行为),使用类而不是简单的指针用于向量迭代器有什么好处吗?
Jon*_*ely 10
一个简单的指针是一个有效的迭代器类型
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());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
159 次 |
| 最近记录: |