【发布时间】:2023-03-27 12:50:01
【问题描述】:
假设我有一个结构
struct Point
{
int x;
int y;
int z;
};
Point p = {1,2,3};
我知道在内存中它是连续组织的
p = | 1 | 2 | 3 |
如果我有Point 结构中的std::vector,data() 函数是否也连续返回数组?或者是否还有额外的“东西”投入其中?例如
Point p1 = {1,2,3};
Point p2 = {4,5,6};
Point p3 = {7,8,9};
std::vector<Point> points;
points.push_back(p1);
points.push_back(p2);
points.push_back(p3);
调用points.data() 会返回指向如下数组的指针:
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8| 9 |
^ptr
此外,如果结构稍微复杂一点,包含一个向量,假设
MultiDimPoint
{
std::vector<int> values;
}
这些MultiDimPoints 中的vector 是否也是连续的?也就是说,会
MultiDimPoint mdp1;
mdp1.values = std::vector<int>(0,1,2,3);
MultiDimPoint mdp2;
mdp2.values = std::vector<int>(4,5,6,7,8,9);
std::vector<MultiDimPoint> mdp_vec;
mdp_vec.pushback(mdp1);
mdp_vec.pushback(mdp2);
给
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8| 9 |
^ptr
mdp_vec.data() 何时被调用?
【问题讨论】:
-
内存布局与此类结构的数组没有什么不同(因为在内部就是这样)。可以通过
data()成员函数访问内部数组,该函数返回指向数组的原始指针。