gpt4 book ai didi

c++ - 当 vector 改变容量时有什么方法可以更新指针/引用值吗?

转载 作者:行者123 更新时间:2023-12-01 23:45:16 25 4
gpt4 key购买 nike

例如:如果我使用一个变量,它引用 vector 的元素,然后 vector 的容量发生变化,我的引用就会变成无效引用。

#include <vector>
#include <iostream>

std::vector<int> v = {1, 2, 3};

int main() {
int &r = v[0];
std::cout << r << std::endl;
v.reserve(256);
std::cout << r << std::endl;
std::cout << v[0] << std::endl;
}

有什么办法可以避免这种情况吗?或者只是不引用 vector 元素?

最佳答案

如果将 vector 中的对象存储为 std::unique_ptr 或 std::shared_ptr,则可以使用 std::unique_ptr::get() 获取指向底层对象的观察指针(如果取消引用智能函数,则可以获取引用)指针)。这样,即使智能指针的内存位置在调整大小时发生变化,观察指针也指向同一个对象。

#include <memory>
#include <vector>
#include <iostream>

int main() {
std::vector<std::unique_ptr<std::string>> v;
std::unique_ptr<std::string> s = std::make_unique<std::string>("Hello");

//Use either a reference or a pointer
const std::string* obs_pointer = s.get();
const std::string& ref = *s;
v.push_back(std::move(s));

v.reserve(256);

std::cout << ref;
std::cout << *obs_pointer;

}

关于c++ - 当 vector 改变容量时有什么方法可以更新指针/引用值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58517909/

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