gpt4 book ai didi

c++ - 在C++中的运行时删除数组以节省一些内存

转载 作者:行者123 更新时间:2023-12-03 07:06:49 25 4
gpt4 key购买 nike

我在微 Controller 上有一个运行C++ 98版本的C++脚本(无法升级)。在此脚本中,我需要初始化两个已经存在的元素405的 double vector 。我尝试初始化两个数组:double a[405]= {7.05925826e+07, ...};double b [405]= {arr[0], arr[0]*arr[1]...};a[405]的定义如下:

double a[405] = {a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], a[16], a[17], a[18], a[19], a[20], a[21], a[22], a[23], a[24], a[25], a[26], a[0]*a[0], a[0]*a[1], a[0]*a[2], a[0]*a[3], a[0]*a[4], a[0]*a[5], a[0]*a[6], a[0]*a[7], a[0]*a[8], a[0]*a[9], a[0]*a[10], a[0]*a[11], a[0]*a[12], a[0]*a[13], a[0]*a[14], a[0]*a[15], a[0]*a[16], a[0]*a[17], a[0]*a[18], a[0]*a[19], a[0]*a[20], a[0]*a[21], a[0]*a[22], a[0]*a[23], a[0]*a[24], a[0]*a[25], a[0]*a[26], a[1]*a[1], a[1]*a[2], a[1]*a[3], a[1]*a[4], a[1]*a[5], a[1]*a[6], a[1]*a[7], a[1]*a[8], a[1]*a[9], a[1]*a[10], a[1]*a[11], a[1]*a[12], a[1]*a[13], a[1]*a[14], a[1]*a[15], a[1]*a[16], a[1]*a[17], a[1]*a[18], a[1]*a[19], a[1]*a[20], a[1]*a[21], a[1]*a[22], a[1]*a[23], a[1]*a[24], a[1]*a[25], a[1]*a[26], a[2]*a[2], a[2]*a[3], a[2]*a[4], a[2]*a[5], a[2]*a[6], a[2]*a[7], a[2]*a[8], a[2]*a[9], a[2]*a[10], a[2]*a[11], a[2]*a[12], a[2]*a[13], a[2]*a[14], a[2]*a[15], a[2]*a[16], a[2]*a[17], a[2]*a[18], a[2]*a[19], a[2]*a[20], a[2]*a[21], a[2]*a[22], a[2]*a[23], a[2]*a[24], a[2]*a[25], a[2]*a[26], a[3]*a[3], a[3]*a[4], a[3]*a[5], a[3]*a[6], a[3]*a[7], a[3]*a[8], a[3]*a[9], a[3]*a[10], a[3]*a[11], a[3]*a[12], a[3]*a[13], a[3]*a[14], a[3]*a[15], a[3]*a[16], a[3]*a[17], a[3]*a[18], a[3]*a[19], a[3]*a[20], a[3]*a[21], a[3]*a[22], a[3]*a[23], a[3]*a[24], a[3]*a[25], a[3]*a[26], a[4]*a[4], a[4]*a[5], a[4]*a[6], a[4]*a[7], a[4]*a[8], a[4]*a[9], a[4]*a[10], a[4]*a[11], a[4]*a[12], a[4]*a[13], a[4]*a[14], a[4]*a[15], a[4]*a[16], a[4]*a[17], a[4]*a[18], a[4]*a[19], a[4]*a[20], a[4]*a[21], a[4]*a[22], a[4]*a[23], a[4]*a[24], a[4]*a[25], a[4]*a[26], a[5]*a[5], a[5]*a[6], a[5]*a[7], a[5]*a[8], a[5]*a[9], a[5]*a[10], a[5]*a[11], a[5]*a[12], a[5]*a[13], a[5]*a[14], a[5]*a[15], a[5]*a[16], a[5]*a[17], a[5]*a[18], a[5]*a[19], a[5]*a[20], a[5]*a[21], a[5]*a[22], a[5]*a[23], a[5]*a[24], a[5]*a[25], a[5]*a[26], a[6]*a[6], a[6]*a[7], a[6]*a[8], a[6]*a[9], a[6]*a[10], a[6]*a[11], a[6]*a[12], a[6]*a[13], a[6]*a[14], a[6]*a[15], a[6]*a[16], a[6]*a[17], a[6]*a[18], a[6]*a[19], a[6]*a[20], a[6]*a[21], a[6]*a[22], a[6]*a[23], a[6]*a[24], a[6]*a[25], a[6]*a[26], a[7]*a[7], a[7]*a[8], a[7]*a[9], a[7]*a[10], a[7]*a[11], a[7]*a[12], a[7]*a[13], a[7]*a[14], a[7]*a[15], a[7]*a[16], a[7]*a[17], a[7]*a[18], a[7]*a[19], a[7]*a[20], a[7]*a[21], a[7]*a[22], a[7]*a[23], a[7]*a[24], a[7]*a[25], a[7]*a[26], a[8]*a[8], a[8]*a[9], a[8]*a[10], a[8]*a[11], a[8]*a[12], a[8]*a[13], a[8]*a[14], a[8]*a[15], a[8]*a[16], a[8]*a[17], a[8]*a[18], a[8]*a[19], a[8]*a[20], a[8]*a[21], a[8]*a[22], a[8]*a[23], a[8]*a[24], a[8]*a[25], a[8]*a[26], a[9]*a[9], a[9]*a[10], a[9]*a[11], a[9]*a[12], a[9]*a[13], a[9]*a[14], a[9]*a[15], a[9]*a[16], a[9]*a[17], a[9]*a[18], a[9]*a[19], a[9]*a[20], a[9]*a[21], a[9]*a[22], a[9]*a[23], a[9]*a[24], a[9]*a[25], a[9]*a[26], a[10]*a[10], a[10]*a[11], a[10]*a[12], a[10]*a[13], a[10]*a[14], a[10]*a[15], a[10]*a[16], a[10]*a[17], a[10]*a[18], a[10]*a[19], a[10]*a[20], a[10]*a[21], a[10]*a[22], a[10]*a[23], a[10]*a[24], a[10]*a[25], a[10]*a[26], a[11]*a[11], a[11]*a[12], a[11]*a[13], a[11]*a[14], a[11]*a[15], a[11]*a[16], a[11]*a[17], a[11]*a[18], a[11]*a[19], a[11]*a[20], a[11]*a[21], a[11]*a[22], a[11]*a[23], a[11]*a[24], a[11]*a[25], a[11]*a[26], a[12]*a[12], a[12]*a[13], a[12]*a[14], a[12]*a[15], a[12]*a[16], a[12]*a[17], a[12]*a[18], a[12]*a[19], a[12]*a[20], a[12]*a[21], a[12]*a[22], a[12]*a[23], a[12]*a[24], a[12]*a[25], a[12]*a[26], a[13]*a[13], a[13]*a[14], a[13]*a[15], a[13]*a[16], a[13]*a[17], a[13]*a[18], a[13]*a[19], a[13]*a[20], a[13]*a[21], a[13]*a[22], a[13]*a[23], a[13]*a[24], a[13]*a[25], a[13]*a[26], a[14]*a[14], a[14]*a[15], a[14]*a[16], a[14]*a[17], a[14]*a[18], a[14]*a[19], a[14]*a[20], a[14]*a[21], a[14]*a[22], a[14]*a[23], a[14]*a[24], a[14]*a[25], a[14]*a[26], a[15]*a[15], a[15]*a[16], a[15]*a[17], a[15]*a[18], a[15]*a[19], a[15]*a[20], a[15]*a[21], a[15]*a[22], a[15]*a[23], a[15]*a[24], a[15]*a[25], a[15]*a[26], a[16]*a[16], a[16]*a[17], a[16]*a[18], a[16]*a[19], a[16]*a[20], a[16]*a[21], a[16]*a[22], a[16]*a[23], a[16]*a[24], a[16]*a[25], a[16]*a[26], a[17]*a[17], a[17]*a[18], a[17]*a[19], a[17]*a[20], a[17]*a[21], a[17]*a[22], a[17]*a[23], a[17]*a[24], a[17]*a[25], a[17]*a[26], a[18]*a[18], a[18]*a[19], a[18]*a[20], a[18]*a[21], a[18]*a[22], a[18]*a[23], a[18]*a[24], a[18]*a[25], a[18]*a[26], a[19]*a[19], a[19]*a[20], a[19]*a[21], a[19]*a[22], a[19]*a[23], a[19]*a[24], a[19]*a[25], a[19]*a[26], a[20]*a[20], a[20]*a[21], a[20]*a[22], a[20]*a[23], a[20]*a[24], a[20]*a[25], a[20]*a[26], a[21]*a[21], a[21]*a[22], a[21]*a[23], a[21]*a[24], a[21]*a[25], a[21]*a[26], a[22]*a[22], a[22]*a[23], a[22]*a[24], a[22]*a[25], a[22]*a[26], a[23]*a[23], a[23]*a[24], a[23]*a[25], a[23]*a[26], a[24]*a[24], a[24]*a[25], a[24]*a[26], a[25]*a[25], a[25]*a[26], a[26]*a[26]};
然后使用此功能对其进行转换:
std::vector<double > ArrayToVector(double* arr, size_t arr_len) {
return std::vector<double>(arr, arr + arr_len);
}

std::vector<double> vec1= ArrayToVector(a,405);
std::vector<double> vec2= ArrayToVector(b,405);
将数组转换为 vector 会导致内存问题。我正在寻找一种将第一个数组 a[405]转换为 vector 后删除该数组的方法,以便为第二个数组转换保留一些内存。我尝试使用 new运算符,但这对我不起作用。任何其他减少内存使用的解决方案都值得赞赏。
然后,我使用a []和b []使用此函数计算其标量积:
double scalar_product(std::vector<double> a, std::vector<double> b)
{
if( a.size() != b.size() ) // error check
{
//puts( "Error a's size not equal to b's size" ) ;
return -1 ; // not defined
}
// compute
double product = 0;
for (unsigned int i = 0; i <= a.size() - 1; i++)
product += (a[i])*(b[i]); // += means add to product
return product;
}

最佳答案

正如某些人已经在注释中建议的那样,您实际上并不需要将数组转换为 vector -只需直接使用数组即可。您只需添加数组的大小作为函数的第三个参数即可。为此,您显然需要知道大小,但是由于它是在内存预算紧张的微 Controller 上运行的,因此,我相对确定您可以访问大小信息。所以它看起来像:

double scalar_product(double a[], double b[], unsigned int size)
{
// compute
double product = 0;
for (unsigned int i = 0; i <= size - 1; i++)
product += (a[i])*(b[i]); // += means add to product
return product;
}
我假设它们的大小相同(它们应该相同),但是即使不相同,您也可以通过提供较短的大小,使用它来为两个不同大小的数组计算(部分)标量积。

关于c++ - 在C++中的运行时删除数组以节省一些内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64557853/

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