New和数组大小
New and arrays size
我有一个动态创建的整数数组。现在我必须删除索引为%3 == 0的所有元素。(例如,3,6,9,…)。那么,减小数组大小的最佳方法是什么呢?对于malloc
,我可以对相同的内存部分使用realloc,但是new
操作符呢?怎么做呢?把所有元素都向左滑动,让所有元素都变成0 ?
#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为你照顾一切不是很好吗?
Hm没有看到注释,其中强制而不是使用STL
C版本:
int *temp = new int[NEW_SIZE];
memcpy( temp , old_array, size_of_old_array * sizeof(int) );
delete[] old_array;
old_array = temp;
- 动态创建数组
- 创建一个新的数组与新的大小
- 将第一个数组中的元素复制到第二个数组
- 删除第一个数组
- 将指向第一个数组的指针重定向到第二个数组
所有这些都回答那么,减小数组大小的最佳方法是什么? -我认为你已经知道如何解决剩下的问题了。
我将简单地分配一个新的较小的数组,然后将元素复制到它。像这样(包括索引为0的元素):
int* array = new int [original_size];
// fill array
size_t new_size = original_size - original_size / 3 - 1; // i think i got this right, untested
int* new_array = new int [new_size];
for (int i = 0, int j = 0; i < original_size; i++)
{
if (i % 3 == 0)
{
new_array[j] = array[i];
j++
}
}
delete [] array;
array = new_array;
new_array = nullptr;
你当然可以在原地工作,把元素移到左边。但是你不能删除通过new[]
分配的数组的一部分
既然这是一个练习,你不能使用STL,为什么你不尝试实现一个简单的向量类自己?
您可以在c++中使用位置new操作符。(需要#include <new>
)。例如
#include <new>
int main(int argc, char **argv) {
double *b = new double[10];
new(b) double[8];
delete [] b;
}
简单地将数据元素设置为0不会释放它们。当你为调整大小的数组分配新的内存时,你需要从以前的内存中复制所有的元素。
我建议你把它作为一个链表来实现。
相关文章:
- 在类c++中使用new声明数组
- 在将 new 与指针一起使用时,创建数组的指定长度
- 声明C++数组(带或不带 "new" 关键字)
- 使用 new 和 值进行数组初始化,但没有显式数量的元素
- 使用new创建数组而不声明大小
- 正确分配放置 new 的数组
- 如何在C++中使用 new 运算符创建对动态创建的数组的引用?
- 使用new时如何重新分配dyyanmic数组,不使用realloc删除C++?
- 第一次尝试使用new动态创建结构数组,程序挂起没有错误
- 使用可变模板列表初始化数组,并放置new
- 如何获取由 new 创建的数组的开始和结束
- 使用 "new" 命令在 C++ 中的类构造函数中分配 2D 数组
- 构造函数不会将使用 new 初始化的数组作为参数
- 将指针返回使用New创建的数组数组
- 使用泛型成员变量"placement new"结构/类数组的正确方法是什么?
- 将内存分配给 2D 数组时,“new int*[rowCount];”的含义是什么?是 2D 数组,是指向数组的指针数组
- 使用 Marshal.FreeHGlobal() 来释放以前在本地分配了"new"的数组?
- 向量在我的类中.错误:数组new [-fpermissive]中的圆括号初始化项
- 新增[size]对象(args ..)在数组new [-fpermissive]中添加圆括号初始化器
- 错误:数组new中的size必须是整型[-fpermissive]