修改变量后C++ vector元素值未更新,加指针也无效,求助
问题解答
为什么输出始终是83?
这是因为你误解了C++中值拷贝的机制:
第一个代码片段
当你初始化 vector<float> te = {1, 4, u}; 时,vector 的第三个元素存储的是 u 当时的数值副本(也就是83)。后续修改 u = 90 只会改变变量 u 自身的值,和已经存入vector的那个83副本完全无关,所以输出还是83。
第二个代码片段
哪怕用了指针,*x 操作是把指针指向的当前值(此时u为83)取出并拷贝到vector中。之后无论你修改 u 还是重新给指针 x 赋值,都无法改变vector里已经存储的83副本,结果自然不会变化。
如何实现元素随u更新的效果?
如果想让vector中的元素和u实时同步,你需要存储指针或引用而非值。但vector不能直接存储引用(引用不支持重新赋值,不符合容器元素的要求),因此可以用指针:
#include <iostream> #include <vector> int main() { float u = 83; std::vector<float*> te = {nullptr, nullptr, &u}; // 存储u的内存地址 u = 90; // 输出时解引用指针,获取当前u的值 std::cout << *te[0] << " " << *te[1] << " " << *te[2] << "\n"; return 0; }
或者使用std::reference_wrapper包装引用(需要包含<functional>头文件):
#include <iostream> #include <vector> #include <functional> int main() { float u = 83; // 注意:前两个元素是临时值,不能存储引用,此处仅演示第三个元素的关联效果 std::vector<std::reference_wrapper<float>> te = {1, 4, u}; u = 90; std::cout << te[0] << " " << te[1] << " " << te[2] << "\n"; return 0; }
如果只有第三个元素需要和u关联,前两个直接存储值即可,无需全部使用指针或引用。
内容的提问来源于stack exchange,提问作者Pacifa
相关产品推荐
相关产品推荐

