我写了一个函数,将数组的大小加倍
int *expand(int ar[], int curr_size) {
int *new_array = new int[curr_size * 2];
for (int i = 0; i < curr_size; i++)
new_array[i] = ar[i];
return new_array;
}
当我尝试使用它
int main(){
int ar[] = {1,2,3,4};
ar = expand(ar, 4);
}
它引发以下错误:
数组类型'int [4]'不可分配
出什么问题了?
答案 0 :(得分:2)
在main()
中,ar
是固定大小的数组。您无法调整其大小或为其分配指针。您所能做的就是从中读取值,并将值写入其中。
对于您要尝试的操作,您需要先分配ar
和new[]
,再分配delete[]
,然后再为其分配新的指针
int main(){
int *ar = new[4]{1,2,3,4};
int *new_ar = expand(ar, 4);
delete [] ar;
ar = new_ar;
delete [] ar;
}
最好使用std::vector
处理此问题:
#include <vector>
int main(){
std::vector<int> ar{1,2,3,4};
ar.resize(ar.size()*2);
}
答案 1 :(得分:1)
c ++中的数组不会增长。它们的大小在编译时设置。使用std :: vector代替。
答案 2 :(得分:0)
雷米·勒博绝对正确。 您的代码可以像这样更改:
#include <string>
#include <vector>
#include <sstream>
#include <algorithm>
using namespace std;
int *expand(int *ar,int curr_size){
int *new_array = new int[curr_size*2];
for (int i = 0; i < curr_size; i++){
new_array[i] = ar[i];
}
delete [] ar;
return new_array;
}
int main()
{
int *ar = new int[4]{1,2,3,4};
for (auto i=0;i<4;i++) {
cout<<ar[i];
}
cout<<endl;
ar = expand(ar,4);
for (auto i=0;i<8;i++) {
cout<<ar[i];
}
return 0;
}