我有一个动态创建的整数数组。现在我必须删除索引为 %3 == 0 的所有元素(例如,3、6、9...)。那么,减少数组大小的最佳方法是什么?通过 malloc
我可以对内存的同一部分使用 realloc,但是 new
运算符又如何呢?这该怎么办啊。只需向左滑动所有元素,将所有其他元素归零?
最佳答案
<罢工>罢工>
<罢工>#include <algorithm>
#include <iostream>
#include <vector>
bool IsDividedByThree (int i) { return ((i%3)==0); }
int RandomNumber () { return (rand()%100); }
int main()
{
std::vector<int> myInts(50);
std::generate(myInts.begin(), myInts.end(), RandomNumber);
std::copy(myInts.begin(), myInts.end(), std::ostream_iterator<int>(std::cout, " "));
myInts.erase(std::remove_if(myInts.begin(), myInts.end(), IsDividedByThree), myInts.end());
std::copy(myInts.begin(), myInts.end(), std::ostream_iterator<int>(std::cout, " "));
}
STL 为您处理一切,这不是很好吗?
罢工><罢工>罢工>
嗯,没有看到强制不使用STL的评论。
C 版本:
int *temp = new int[NEW_SIZE];
memcpy( temp , old_array, size_of_old_array * sizeof(int) );
delete[] old_array;
old_array = temp;
- 动态创建数组
- 创建一个具有新大小的新数组
- 将元素从第一个数组复制到第二个数组
- 删除第一个数组
- 将第一个数组的指针重定向到第二个数组
所有这些答案那么,减少数组大小的最佳方法是什么? - 我假设您已经知道如何解决其余问题。
关于c++ - 新的和数组的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8377052/