我有一个带有非平凡构造函数的类:

class mystream
{
public:
    mystream(size_t buffersize,size_t index) : buffersize(buffersize),index(index){}

    size_t buffersize;
    size_t index;
};
mystream 实例有一个唯一的 id,它对应于它在管理类 vector 中的位置:
class mystreammanager
{
public:
   mystreammanager() : streams(8,1024, /* WHAT TO DO HERE ??? */ )
   {
   }

  std::vector<mystream> streams;
};

如何构造 vector 并使用索引的升序值初始化其元素?

最佳答案

一种简洁、清晰且易于调试的方法是将 vector 的构建推迟到静态类函数:

class mystreammanager
{
public:
   mystreammanager() : streams{ generate_streams(1024, 8) }
   {
   }

private:
  static std::vector<mystream> generate_streams(size_t buffersize, size_t qty)
  {
    std::vector<mystream> result;
    result.reserve(qty);
    for(size_t i = 0 ; i < qty ; ++qty) {
      result.emplace_back(buffersize, i);
    }
    return result;
  }

  std::vector<mystream> streams;
};

这是最有效的,因为:
  • RVO 使 vector 就地构造
  • 避免列表初始化意味着没有多余的拷贝。
  • 关于c++ - 在类构造函数中为元素构造函数设置不同值的 std::vector,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30347607/

    10-09 06:38