减小数组的大小

时间:2014-04-01 17:32:09

标签: c++ arrays

我有一个包含大量数字的数组,我必须"删除"其中一些所以我决定放零,我可以忽略后者,所以我得到了这个:

  

0033033055000022220440044000

但现在我意识到我需要将n-1添加到原始大小,例如我有5所以我需要在它之前添加3的数字,现在的问题是我不需要零。

因此,有没有办法减小数组大小/删除不需要的索引,或者只是编写一个循环直到找到整数的函数会更简单?

2 个答案:

答案 0 :(得分:0)

std::vector<int> values;
values.erase(std::remove(values.begin(), values.end(), 0));
values.shrink_to_fit();

std::remove将所有与给定值匹配的元素(在本例中为0)放在向量的末尾,并将迭代器返回到已删除元素的开头。擦除然后获取此迭代器并从向量中删除所有后续值。然后,shrink_to_fit尝试使用较少的内存重新分配向量,同时考虑到元素数量的减少。除非你删除了数千个元素,否则它不值得缩小向量。

答案 1 :(得分:0)

你想要完成的是什么。通过使用malloc()和realloc(),您可以动态设置您正在使用的数组的大小,从而允许您根据需要增大/缩小数组。

这很复杂,需要仔细的指针管理。如果那是你想要去的路径,那么有几个在线教程可以做到这一点。 This是我在谷歌搜索中找到的第一件事,似乎给出了如何做你想做的事情的基本想法。

话虽如此,不要这样做。标准库(STD)有几种不同的工具来存储更适合任务的数据。 Vectors是一个经典的选择,其工作方式几乎与数组完全相同,但当您从中间移除项目时,它们通常很差。 Lists真的很擅长删除它们中间的项目,但是遍历它们可能会很痛苦,因为你必须从一开始就开始工作(你无法访问中间的东西)随意。)选择最适合您需求的那些,并使用它们。它会简化你的生活。