gpt4 book ai didi

c++ - vector 到循环中的数组不起作用

转载 作者:太空狗 更新时间:2023-10-29 20:08:12 29 4
gpt4 key购买 nike

当我尝试在循环内将整数 vector 转换为整数数组时,虽然在循环内转换似乎有效,但一旦循环终止,数组内的值就不正确。

我尝试了 std::copy 而不是 &vector[0] 并且出现了同样的问题。而且我知道没有必要将 vector 转换为数组。我认为问题是由于数组被分配了一个指向变量的指针,该变量在循环后被销毁,但我对 c++ 还很陌生,所以即使我是正确的,我也不知道如何修复它。

#include "pch.h"
#include <iostream>
#include <vector>

int main()
{
int* arr;
for (int i = 0; i < 1; i++)
{
std::vector<int> vec{ 1 };
arr = &vec[0];
std::cout << "Inside the loop in the vector: " << vec[0] << std::endl;
std::cout << "Inside the loop in the array: " << arr[0] << std::endl;
}
std::cout << "Outside the loop in the array: " << arr[0];
}

我希望输出看起来像这样:

vector 中的循环内:1
在数组的循环内:1
数组中的循环外:1

但实际上是这样的:

vector 中的循环内:1
在数组的循环内:1
数组中的循环外:-572662307

最佳答案

int* arr; <- 这是一个指针,而不是数组。

std::vector<int> vec{ 1 }; <- 这个 vector 只存在于你的循环体内。这意味着,每次迭代都会创建一个新 vector ,并在迭代结束时销毁它,释放它分配的内存。

arr = &vec[0]; <- 此行不复制任何内容,它只是设置 arr 的地址指向 vector 分配内存中的第一个元素。

由于你的vector在循环后被销毁,地址arr指向无效。只要您在循环内,它指向的地址就是有效的,您就可以安全地访问该内存。

你尝试是对的 std::copy ,但是如果你想复制任何东西,你需要先分配内存,你可以复制到。 int arr[1];将创建一个大小为 1 的 int 数组,它可以用作 std::copy 中的目标. int* arr = new int[1];也可以,但需要您稍后自己释放内存(delete[] arr;)。除了学习目的,我不建议自己管理内存。

关于c++ - vector 到循环中的数组不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56395684/

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