计数存储在数组中的元素

时间:2012-02-05 12:12:33

标签: c++ arrays

我真的需要一些帮助...我详细说明了我的问题,我需要一个特定类型的数组,但在从其他数组中检索值之前我不知道它的长度,用于结构。事实上,我不想花时间再次传递几个循环,我想知道最好的方法。我应该使用堆栈和计数器,并在填充后,实例化并填充数组吗?

RelAttr *tab;
//need to initialize it but how
/*several for loops retrieving values*/
   tab[i] = value;
/*end for loops*/

显然这段代码不完整,但它是如何完成的。而且我知道如果没有在...之前指定数组长度,我就无法进行修改。

感谢您的帮助

4 个答案:

答案 0 :(得分:4)

只需使用std::vector

std::vector<RelAttr> vec;

vec.push_back(a);
vec.push_back(b);
...

它透明地管理自己的增长。每次增长时,所有项目都会被复制,但其摊销成本为O(1)。

存储也保证是连续的,所以如果你真的需要一个原始的C风格的数组,那么你可以简单地这样做:

const RelAttr *p = &vec[0];

但是,如果您有一个需要满足的旧版C API,那么您应该只这样做。

答案 1 :(得分:1)

由于这是C ++,建议使用std::vectorstd::vector<RelAttr>),因为事先不需要知道对象的数量。您可以根据需要使用std::vector::push_back()添加新元素。

答案 2 :(得分:0)

如果您在编译时不知道长度,可以使用

功能malloc,运营商newvector或其他类型的容器

答案 3 :(得分:0)

最简单的方法(假设没有特别的性能关键)是使用std :: vector来组合值,并且(如果需要)将vertor转换为数组。喜欢的东西;

std::vector<RelAttr> vec;
...
vec.push_back(value);
...

如果你想在之后将它转换为数组;

RelAttr *tab = new RelAttr[vec.size()];
copy( vec.begin(), vec.end(), a);