循环中的矢量到数组不起作用
Vector to array within a loop not working
当我尝试将整数向量转换为循环内的整数数组时,尽管在循环中转换似乎已经有效,但一旦循环终止,数组中的值就不正确。
我尝试了 std::copy 而不是 &vector[0],但出现了同样的问题。而且我知道不需要将向量转换为数组。我认为问题是由于数组被分配了一个指向变量的指针,该变量在循环后被销毁,但我对 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];
}
我希望输出如下所示:
向量中的循环内部:1 数组中的循环内部:1数组中的循环外部:1
但实际上结果是这样的:
向量中的循环内部:1 数组中的循环内部:1
数组中的循环外部:-
572662307
int* arr;
<- 这是一个指针,而不是数组。
std::vector<int> vec{ 1 };
<-此向量仅存在于循环的主体中。这意味着,每次迭代都会创建一个新向量,并在迭代结束时销毁它,从而释放它分配的内存。
arr = &vec[0];
<-此行不会复制任何内容,它只是将arr
指向的地址设置为矢量分配内存中的第一个元素。
由于向量在循环后被销毁,因此arr
指向的地址无效。只要您在循环内,它指向的地址就是有效的,您可以安全地访问该内存。
您尝试std::copy
是对的,但是如果要复制任何内容,则需要首先分配可以复制到的内存。int arr[1];
将创建一个大小为 1 的 int 数组,该数组可用作std::copy
中的目标。int* arr = new int[1];
也可以,但要求您以后自己释放内存(delete[] arr;
)。我不建议自己管理记忆,除非出于学习目的。
当vec
超出范围时,将释放vec[0]
的存储。 您不会期望指向它的指针在vec
变量所在的范围之外有效。
我建议你阅读这个答案。
- 为什么我的数组双精度函数不起作用?
- 当我使用自定义类型创建动态数组时,即使使用字符串,它似乎也不起作用
- C++ - 块不移动,我的数组不起作用
- 字符数组不起作用:C++
- 使用 cin、if 语句和数组不起作用
- 循环中的矢量到数组不起作用
- 标准::矢量数组不起作用
- 二进制树数算法不起作用
- 四元数旋转不起作用
- CPP / JUCE 音频编程框架 - 滑块数组不起作用 - 单个滑块工作
- 在 gcc 中显示字符数组不起作用
- 字符串到字符数组不起作用
- C++随机字符串数组不起作用
- 为什么这个指针算术在 2D 数组上起作用
- 字符赋值数组不起作用
- 如果C++数组不起作用
- 删除动态 2D 数组不起作用
- 通过strftime从结构复制到数组不起作用
- 四元数旋转不起作用
- 使用 strcat 追加字符数组不起作用