如何在C++中调整数组大小?

dev*_*ull 20 c++

可能重复:
您可以在初始化后调整C++数组的大小吗?

我需要在C++中使用以下C#代码

Array.Resize(ref A, A.Length - 1);
Run Code Online (Sandbox Code Playgroud)

如何在C++中实现这一目标?

Kir*_*kov 35

您无法调整数组大小,只能分配新的数组(具有更大的大小)并复制旧数组的内容.如果您不想使用std::vector(出于某种原因),这里的代码是:

int size = 10;
int* arr = new int[size];

void resize() {
    size_t newSize = size * 2;
    int* newArr = new int[newSize];

    memcpy( newArr, arr, size * sizeof(int) );

    size = newSize;
    delete [] arr;
    arr = newArr;
}
Run Code Online (Sandbox Code Playgroud)

代码来自http://www.cplusplus.com/forum/general/11111/.

  • 当在`new`和`delete`之间发生什么时,会抛出异常?`-1` _for建议手动资源管理给newbie_.(如果你想使这个安全,你需要一个智能指针.如果你再添加一些实用函数,你将到达`std :: vector`.) (14认同)
  • 感谢-1 :)我建议新手明白**在数组调整大小期间没有发生任何魔法**,创建新数组并复制所有元素,如果你编写的代码每次需要时调整数组大小为1要添加的额外元素,那么您将浪费资源. (13认同)
  • 无论如何你应该尝试*删除*.这就是智能指针的用途. (2认同)

sbi*_*sbi 31

数组的大小在C++中是静态的.您无法动态调整大小.这std::vector是为了:

std::vector<int> v; // size of the vector starts at 0

v.push_back(10); // v now has 1 element
v.push_back(20); // v now has 2 elements
v.push_back(30); // v now has 3 elements

v.pop_back(); // removes the 30 and resizes v to 2

v.resize(v.size() - 1); // resizes v to 1
Run Code Online (Sandbox Code Playgroud)

  • @FredOverflow:是的,这是可能的.但是,我试图坚持问题中给出的代码.我认为`size-1`只是一个占位符. (4认同)