就像许多人所说的那样,您可以只使用operator[]
重新分配旧值,因为您已经调整了向量的大小或用其他值填充了它。如果你的数组总是有一个固定的大小,你可以使用std::array
,这应该会提供性能提升,但会牺牲调整数组大小或在运行时确定其大小的能力。
std::array<std::string,2> a1;
a1[0] = "world";
a1[1] = "world2";
std::cout<<a1.at(1)<<std::endl; //outputs world2
请注意,大小必须是静态的,因此您不能执行以下操作:
int numStrings;
std::cin>>numStrings;
std::array<std::string,numStrings> a2; //ERROR
std::array
不幸的是,除了使用初始化列表之外,我认为没有任何方法可以在没有默认构造函数的情况下进行初始化。
struct T
{
T(std::string s):str(s){} //no default constructor
std::string str;
}
std::array<T,2> a3 = {T(""), ""}; //you can use a conversion constructor implicitly
显然,如果您想要一个包含大量对象的数组,这是不切实际的。