C++:我可以在另一个向量中定义向量吗?

C++: Can I define vector within another vector?

在C/C++纯数组中,可以在另一个数组中定义一个数组,例如:

int a[5];
int *p = &a[1];

因此,如果您更改 p[0],它将影响 a[1],依此类推。 vector中有没有类似的机制?

vector<int> a(5, 0);
?

你的第一个例子

int a[5];
int *p = &a[1];

不会在另一个数组中定义一个数组,它只会创建一个指向现有数组中元素的指针。对于像 std::vector 这样的标准容器,同样可以通过使用迭代器来实现:

vector<int> a(5, 0);           // a = [0, 0, 0, 0, 0]
auto iterator = a.begin() + 1; // "points" to a[1]
*iterator = 2;                 // a = [0, 2, 0, 0, 0]

迭代器在标准库和首选解决方案中广泛使用,以提供对容器(子)范围的访问。


如果您可以使用 C++20 或更高版本,您可能需要查看 std::span

如果 a 也是向量,则完全相同的代码 int *p = &a[1]; 也有效。

但是真的不推荐。它甚至比数组更糟糕,因为向量可以重新分配,并且您的指针将失效。