std :: vector <T> :: iterator可以简单地设为T *吗?

博洛夫

简单的理论问题:简单的指针会成为有效的迭代器类型std::vector吗?

对于其他容器(例如列表,地图),这是不可能的,但是对于std::vector所保存的数据,保证是连续的,因此我看不出为什么不这样做。

据我所知,某些实现(例如Visual Studio)会在调试版本上进行一些安全的检查。但这是在UB领土内,因此对于明确定义的行为,我认为没有区别。

除了进行某些检查(“修改”未定义的行为)外,对于矢量迭代器,使用类而不是简单的指针还有什么优点?

乔纳森·韦克利(Jonathan Wakely)

一个简单的指针将是有效的迭代器类型std::vector吗?

是的。并且也适用于std::basic_stringstd::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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从T *指针构造std :: vector <T>吗?

来自分类Dev

如果T对齐,std :: vector <T>也对齐吗?

来自分类Dev

我可以使用std :: vector <std :: vector <T >>表示C ++中的二维数组吗?

来自分类Dev

使用std :: vector <std :: shared_ptr <const T>>是反模式吗?

来自分类Dev

还有什么更好的替代std :: vector <std :: unique_ptr <T >>吗?

来自分类Dev

还有什么更好的替代std :: vector <std :: unique_ptr <T >>吗?

来自分类Dev

使用std :: vector <std :: shared_ptr <const T>>是反模式吗?

来自分类Dev

std :: vector <T> :: assign使用子范围有效吗?

来自分类Dev

如何将std :: vector <std :: reference_wrapper <T>>转换为std :: vector <T>

来自分类Dev

继承自定义类的std :: vector :: iterator吗?

来自分类Dev

用std :: vector <T *>控制内存

来自分类Dev

将 std::vector<T> 转换为 char *

来自分类Dev

std :: vector <T> :: insert和std :: move_iterator <T>如何一起工作?

来自分类Dev

填充std :: vector时出现“ vector <T>太长”错误

来自分类Dev

我可以将std :: vector <int> *转换为int *吗?

来自分类Dev

我可以将std :: vector <int> *转换为int *吗?

来自分类Dev

有std :: vector的后代可以合并和排序吗?

来自分类Dev

std::string 不是 std::vector<char> 吗?

来自分类Dev

std :: vector <std :: array <T,N >>或std :: array <std :: vector <T>,N>类型的数组如何存储在内存中?

来自分类Dev

const std :: vector <T>和std :: vector <T> const有什么区别?

来自分类Dev

const std :: vector <T>和std :: vector <T> const有什么区别?

来自分类Dev

可以将std :: vector :: iterator合法地用作指针

来自分类Dev

T-> std :: vector <T>的模板专业化

来自分类Dev

在现代 C++ 中将 std::array<std::array<T,N>> 转换为 std::vector<T>

来自分类Dev

可以从vector本身的元素构造std :: vector emplace_back吗?

来自分类Dev

std :: array <T,N>可以释放其数据吗?

来自分类Dev

内部模板类型std :: vector <std :: vector <T >>的功能模板重载或特化

来自分类Dev

将std :: vector <T>函数应用于从std :: vector派生的类

来自分类Dev

std :: vector <std :: vector <T >>的迭代器有效性

Related 相关文章

  1. 1

    从T *指针构造std :: vector <T>吗?

  2. 2

    如果T对齐,std :: vector <T>也对齐吗?

  3. 3

    我可以使用std :: vector <std :: vector <T >>表示C ++中的二维数组吗?

  4. 4

    使用std :: vector <std :: shared_ptr <const T>>是反模式吗?

  5. 5

    还有什么更好的替代std :: vector <std :: unique_ptr <T >>吗?

  6. 6

    还有什么更好的替代std :: vector <std :: unique_ptr <T >>吗?

  7. 7

    使用std :: vector <std :: shared_ptr <const T>>是反模式吗?

  8. 8

    std :: vector <T> :: assign使用子范围有效吗?

  9. 9

    如何将std :: vector <std :: reference_wrapper <T>>转换为std :: vector <T>

  10. 10

    继承自定义类的std :: vector :: iterator吗?

  11. 11

    用std :: vector <T *>控制内存

  12. 12

    将 std::vector<T> 转换为 char *

  13. 13

    std :: vector <T> :: insert和std :: move_iterator <T>如何一起工作?

  14. 14

    填充std :: vector时出现“ vector <T>太长”错误

  15. 15

    我可以将std :: vector <int> *转换为int *吗?

  16. 16

    我可以将std :: vector <int> *转换为int *吗?

  17. 17

    有std :: vector的后代可以合并和排序吗?

  18. 18

    std::string 不是 std::vector<char> 吗?

  19. 19

    std :: vector <std :: array <T,N >>或std :: array <std :: vector <T>,N>类型的数组如何存储在内存中?

  20. 20

    const std :: vector <T>和std :: vector <T> const有什么区别?

  21. 21

    const std :: vector <T>和std :: vector <T> const有什么区别?

  22. 22

    可以将std :: vector :: iterator合法地用作指针

  23. 23

    T-> std :: vector <T>的模板专业化

  24. 24

    在现代 C++ 中将 std::array<std::array<T,N>> 转换为 std::vector<T>

  25. 25

    可以从vector本身的元素构造std :: vector emplace_back吗?

  26. 26

    std :: array <T,N>可以释放其数据吗?

  27. 27

    内部模板类型std :: vector <std :: vector <T >>的功能模板重载或特化

  28. 28

    将std :: vector <T>函数应用于从std :: vector派生的类

  29. 29

    std :: vector <std :: vector <T >>的迭代器有效性

热门标签

归档