在C++中,std::vector
是一个动态数组,它可以根据需要自动调整大小。当向std::vector
添加元素时,如果底层数组已满,它将重新分配一个更大的数组,并将旧数组的元素复制到新数组中。因此,在std::vector
中添加元素时,指向元素的指针或引用可能会失效,因为它们可能指向旧数组的内存位置。
为了避免这种情况,可以使用指针或引用指向std::vector
中的元素。当std::vector
重新分配内存时,这些指针或引用仍然有效,因为它们指向新数组的内存位置。
例如,以下代码演示了如何在std::vector
中添加元素,同时使用指针访问这些元素:
#include<iostream>
#include<vector>
int main() {
std::vector<int> vec = {1, 2, 3};
int* ptr = &vec[1];
std::cout << "Value of vec[1]: " << *ptr<< std::endl;
vec.push_back(4);
std::cout << "Value of vec[1]: " << *ptr<< std::endl;
return 0;
}
在这个例子中,我们将vec[1]
的值存储在指针ptr
中。然后,我们向vec
添加一个新元素,即vec[3]
。尽管std::vector
重新分配了内存,但指针ptr
仍然指向vec[1]
的正确内存位置。因此,输出将显示vec[1]
的值在添加新元素后仍然保持不变。
总之,在C++中,std::vector
是一个动态数组,当添加新元素时,它可能会重新分配内存。因此,在使用指针或引用访问std::vector
中的元素时,需要注意这些元素的位置可能会发生变化。
领取专属 10元无门槛券
手把手带您无忧上云