【发布时间】:2010-09-20 08:15:44
【问题描述】:
我需要在 C++ 中执行以下 C# 代码的等效操作
Array.Resize(ref A, A.Length - 1);
如何在 C++ 中实现这一点?
【问题讨论】:
-
有什么理由不使用 std::vector 吗?
标签: c++
我需要在 C++ 中执行以下 C# 代码的等效操作
Array.Resize(ref A, A.Length - 1);
如何在 C++ 中实现这一点?
【问题讨论】:
标签: c++
你不能调整数组的大小,你只能分配一个新的(更大的)并复制旧数组的内容。
如果你不想使用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;
}
【讨论】:
new 和delete 之间抛出异常时会发生什么? -1 向新手推荐手动资源管理。 (如果你想让这个安全,你需要一个智能指针。如果你添加更多的实用函数,你会到达std::vector。)
new 和delete 之间会抛出异常,这意味着你遇到了真正的麻烦,你不能在resize 函数中做任何事情,你不应该在那里捕获异常(也许只是为了重新抛出一些更丰富的信息)并让调用者处理它。
数组的大小在 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
【讨论】:
size-1 只是一个占位符。
ref 就没有必要了。
std::vector
或【讨论】:
原始数组在 C++ 中不可调整大小。
您应该使用类似 Vector 的类,它确实允许调整大小..
std::vector 允许您调整它的大小以及在添加元素时允许动态调整大小(通常不需要手动调整大小来添加)。
【讨论】:
您不能这样做,请参阅this question 的答案。
您可以改用std:vector。
【讨论】: