我真的需要一些帮助...我详细说明了我的问题,我需要一个特定类型的数组,但在从其他数组中检索值之前我不知道它的长度,用于结构。事实上,我不想花时间再次传递几个循环,我想知道最好的方法。我应该使用堆栈和计数器,并在填充后,实例化并填充数组吗?
RelAttr *tab;
//need to initialize it but how
/*several for loops retrieving values*/
tab[i] = value;
/*end for loops*/
显然这段代码不完整,但它是如何完成的。而且我知道如果没有在...之前指定数组长度,我就无法进行修改。
感谢您的帮助
答案 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::vector
(std::vector<RelAttr>
),因为事先不需要知道对象的数量。您可以根据需要使用std::vector::push_back()
添加新元素。
答案 2 :(得分:0)
如果您在编译时不知道长度,可以使用
功能malloc
,运营商new
,vector
或其他类型的容器
答案 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);