将迭代器范围复制到矢量而不重复

时间:2017-04-12 09:05:49

标签: c++ vector

我正在尝试将一个文件读取到一个向量中,我得到了这个很好的post,它包含了两种方法。(我会忽略非重要的行)

std::ifstream testFile("testfile", std::ios::binary);

std::vector<char> fileContents((std::istreambuf_iterator<char>(testFile)),
                               std::istreambuf_iterator<char>());

std::vector<char> fileContents;
fileContents.assign(std::istreambuf_iterator<char>(testFile),
                    std::istreambuf_iterator<char>());

我的代码(C ++ 11)非常适合第二种方法(我需要很早构建的向量),但是从CPP文档看来,在第一种解决方案中,构造函数将添加emplace构造的值,相比之下&#34;分配&#34;将创建新对象并将其添加到矢量的方法,从而进行复制。

是否有解决方案以便稍后分配矢量但不制作副本?

由于

2 个答案:

答案 0 :(得分:0)

也许你可以换一个新的载体:

std::vector<char> fileContents;
std::vector<char> newContents((std::istreambuf_iterator<char>(testFile)),
                               std::istreambuf_iterator<char>());
std::swap(fileContents, newContents);

答案 1 :(得分:0)

根据给出容器a<T>

的标准
a.assign(i,j)

工作

  

范围[i,j)中的每个迭代器都应该被解除引用一次。

并最终

  

用'i,j)的副本替换'a'中的元素。

总而言之,您无法在不制作副本的情况下分配矢量。