gpt4 book ai didi

c++ - 将静态数组复制到动态数组

转载 作者:行者123 更新时间:2023-12-02 10:25:53 25 4
gpt4 key购买 nike

我在C++中定义一个动态数组:

double *values;
int size = 5;
values = new (nothrow) double[size];

我知道这是可行的,因为它可以编译,但是我看到了一些潜在的问题。

说我想给这个数组赋值:
double samples = [1,2,3,4,5,6];
values = samples; //runtime error: free or corruption

到底是什么发生了此错误?

最佳答案

您应该使用std::copy将静态数组复制到动态数组,如下例所示:

#include <iostream>
#include <algorithm>


int main() {

int *a = new int[5];
int b[] = {1, 2, 3, 4, 5};
std::copy(b, b + 5, a);
for(std::size_t i(0); i < 5; ++i) std::cout << a[i] << " ";
std::cout << std::endl;

return 0;
}

LIVE DEMO

或者,如果您希望分配的便利而不是逐元素复制,并且您知道在编译时知道数组的大小并且编译器支持C++ 11功能,请使用 std::array,如下例所示:
#include <iostream>
#include <array>

int main() {

std::array<int, 5> a;
std::array<int, 5> b {{1, 2, 3, 4, 5}};
a = b;
for(auto i : a) std::cout << i << " ";
std::cout << std::endl;

return 0;
}

LIVE DEMO

但是,建议使用 std::vector而不是使用原始动态数组,如下例所示:
#include <iostream>
#include <vector>
#include <algorithm>

int main() {
std::vector<int> a(5);
int b[] = {1, 2, 3, 4, 5};
std::copy(b, b + 5, a.begin());
for(auto i : a) std::cout << i << " ";
std::cout << std::endl;

return 0;
}

LIVE DEMO

关于c++ - 将静态数组复制到动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24336258/

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