gpt4 book ai didi

c++ - 我可以确定 vector 包含对象而不是指向对象的指针吗?

转载 作者:行者123 更新时间:2023-12-05 09:03:39 24 4
gpt4 key购买 nike

我能确定 std::vector(或者,一般来说,任何标准容器)包含对象而不是指向对象的指针,无论对象的类有多复杂,如果它有恒定大小?

例如:在这个简单的例子中:

struct MyStruct { int a, b; };
std::vector<MyStruct> vs;

生成的 vector 布局是:

[ ..., a1, b1, a2, b2, a3, b3, ... ]

标准是否保证在这种(或更复杂的)情况下会发生同样的情况,其中结构的大小应该是常数:

struct MyStruct2 { float f[10]; };
std::vector<MyStruct2> vs2;

有布局:

[ ..., f1[0], f1[1], ..., f1[9], f2[0], f2[1], ..., f2[9], ... ]

代替:

[ ..., *pf1, *pf2, ... ]
pf1 = [ f1[0], f1[1], ..., f1[9] ]
pf2 = [ f2[0], f2[1], ..., f2[9] ]

最佳答案

自 C++11 及以后版本(C++03 几乎 保证),std::vector 中的数据是连续的,没有间隙。

特别是如果您有一个指向 std::vector 中元素的指针,您可以使用指针算法访问所有其他元素。

当然,指针运算以 structsizeof 为单位进行计算。 struct 本身可能包含填充。尝试到达 b 的行为,给定指向结构中 a 的指针是未定义的。

关于c++ - 我可以确定 vector 包含对象而不是指向对象的指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69737493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com