我有以下代码片段:
#include <boost/assign/list_of.hpp>
#include <boost/assert.hpp>
int main()
{
const std::vector<int> v = boost::assign::list_of(1).repeat(999, 1).repeat(1000, 2);
BOOST_ASSERT(v.size() == 2000);
}
我希望将其转换为更像
的内容#include <boost/assign/list_of.hpp>
#include <boost/assert.hpp>
int main()
{
const std::vector<int> v = boost::assign::repeat(1000, 1).repeat(1000, 2); // illegal
// or
// const std::vector<int> v(1000,1).repeat(1000,2); // illegal
BOOST_ASSERT(v.size() == 2000);
}
我是否可以使用某种适配器,以便我不需要将boost::assign::list_of()
与一个元素一起使用,然后使用boost::assign::repeat
?
我找到了使用boost::assign::push_back()
执行此操作的方法,但这样我就无法将vector声明为const
:
#include <boost/assign/list_of.hpp>
#include <boost/assert.hpp>
int main()
{
std::vector<int> v;
boost::assign::push_back(v).repeat(1000, 1).repeat(1000, 2);
BOOST_ASSERT(v.size() == 2000);
}
修改
正如我所建议的那样:
std::vector<int> v = boost::assign::list_of<int>().repeat(1000, 3).repeat(1000, 2);
但这仅适用于非const
初始化,如上所述。我可以使用这样的东西:
const std::vector<int> v = boost::assign_detail::generic_list<int>().repeat(1000, 1).repeat(1000, 2);
这是推荐的吗?