【发布时间】:2017-08-03 18:23:50
【问题描述】:
我想初始化对象数组中向量的大小。
每个向量都有相同的大小,所以...
LIB 文件:
#include <vector>
Class NameClass
{
public:
explicit NameClass( unsigned size )
{
vectorName.resize( size );
}
std::vector <type> vectorName;
};
主文件:
#include "lib.hpp"
int main( void )
{
NameClass object( size ); #1
NameClass object[ number_objects ]( size ); #2
NameClass object[ number_objects ] = {NameClass(size), NameClass(size), ... }; #3
return 0;
}
#1 有效,但不是数组, #2没有,编译器说“要求从int转换为非标量类型'NameClass'” 并且#3有效,但是......初始化每个对象只是荒谬的。而且我不能只在类中放置一个静态大小,因为值会发生变化。
所以...我的研究表明我需要使用 std::generate。问题是……最好的方法是什么?
对不起,如果是简单的问题如何使用 std::generate 我是初学者,很难找到最佳解决方案。
有些人建议复杂的解决方案,但我继续使用我的解决方案
#include "lib.hpp"
int main( void )
{
unsigned number_objects = something;
unsigned size = other_thing;
NameClass object[ number_objects ];
for( unsigned i = 0; i < number_objects; i++)
object[i].vectorName.resize( size );
return 0;
}
我使用 Thins 是因为它确实易于理解,并且有效。但我对其他易于理解和实用的解决方案持开放态度。
【问题讨论】:
-
NameClass object[ number_objects ] = {NameClass(size)}我认为应该可以工作 -
@Ninetainedo No, this will only init the first one (其余默认初始化)
-
@Borgleader:从技术上讲,其余的都是值初始化的。对于
vector,结果是一样的。