如何用boost :: assign :: repeat用重复元素初始化const std :: vector?

时间:2016-08-03 19:45:11

标签: c++ boost c++03

我有以下代码片段:

#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);

这是推荐的吗?

0 个答案:

没有答案