gpt4 book ai didi

c++ - 将值从一个 vector 复制到另一个 vector (来自书籍)

转载 作者:太空宇宙 更新时间:2023-11-04 15:45:53 25 4
gpt4 key购买 nike

考虑这段代码。

#include <iostream>
#include <vector>

using namespace std;


int main()
{
vector <int *> test;
vector <int *> v;
int *a = new int;
int *b = new int;
*a = 1;
*b = 2;
v.push_back (a);
v.push_back (b);
for (int i = 0; i < 2; ++i)
{
int n = *v[i];
test.push_back (&n);
}
cout << *test[0] << " " << *test[1] << endl;
delete a;
delete b;
return 0;
}

问题的陈述是:

“给定这段代码,回答以下问题:

  1. 为什么“测试” vector 只包含 2?

  2. 我们如何更改 for 循环以正确复制(仅 for 循环内的代码)?”

我无法回答这些问题中的任何一个,因此不胜感激。

提前致谢。

最佳答案

该代码引入了悬挂指针。循环体如下所示:

{
int n = *v[i];
test.push_back (&n);
}

一旦循环体结束,局部变量 n 就失去作用域,因此指针 &n 现在是一个悬空指针。如果碰巧 test 只包含 2,那正是 undefined behavior 随机产生的结果。

如果您想“正确地”将数据复制到test,您可以将for 循环体更改为:

{
int* n = new int;
*n = *v[i];
test.push_back (n);
}

请对“正确”持保留态度...

关于c++ - 将值从一个 vector 复制到另一个 vector (来自书籍),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16597231/

25 4 0
文章推荐: c++ - 按值 : C++ 返回时未调用复制构造函数
文章推荐: html - 为什么同一个
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com