今天我有这个:
std::vector<Foo> foos = GetFoos();
if (foos.empty())
{
foos.push_back(Foo());
}
我喜欢写下这样的文章:
std::vector<Foo> foos = GetFoos() || {Foo()};
是否有类似的东西,也许在Boost中?
答案 0 :(得分:1)
好吧,因为将一个向量调整为现有大小是一个无操作,并且因为将它调整为大于它已经大于默认构造新元素,你可以这样做:
std::vector<Foo> foos = GetFoos();
foos.resize(std::max(1, foos.size()));
但是,我实际上更喜欢你的第一个例子;它更加清晰,意味着意图。
但是有一个单行程吗?不,谢天谢地。
答案 1 :(得分:1)
我不确定语言中是否有足够的技巧来支持语法
std::vector<Foo> foos = GetFoos() || {Foo()};
最好编写一个能够清楚表达你的意图并使用它的函数。
void ensureAtLeastOneElement(std::vector<Foo>& v)
{
if (v.empty())
{
v.push_back(Foo());
}
}
并将其用作:
std::vector<Foo> foos = GetFoos();
ensureAtLeastOneElement(foos);