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];
也有效。
但是真的不推荐。它甚至比数组更糟糕,因为向量可以重新分配,并且您的指针将失效。
在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];
也有效。
但是真的不推荐。它甚至比数组更糟糕,因为向量可以重新分配,并且您的指针将失效。