我不明白向量复制构造函数和范围构造函数的优点或区别。当我构造像这样的三个向量时:
vector<int> FirstVec(3, 911); //fill constructor
vector<int> SecondVec(FirstVec.begin(), FirstVec.end()); //range constructor
vector<int> ThirdVec(FirstVec); //copy constructorSecondVec和ThirdVec的内容完全相同。是否有使用其中之一具有优势的方案?谢谢。
发布于 2015-05-08 10:16:13
当您想要复制不同类型容器的项或不想复制整个范围时,范围构造函数非常有用。例如
int a[] = {1,2,3,4,5};
std::set<int> s{3, 911};
std::vector<int> v0{1,2,3,4,5};
std::vector<int> v1(std::begin(a), std::end(a));
std::vector<int> v2(a+1, a+3);
std::vector<int> v3(s.begin(), s.end());
vector<int> v4(v0.begin(), v0.begin() + 3);发布于 2015-05-08 10:20:46
范围构造函数更通用;您可以提供任何有效的适当元素序列,不一定来自同一类型的容器,也不一定跨越整个容器,甚至可以从容器中提供。
复制构造函数更简单,而且可能更高效;但仅当您想要复制另一个向量的全部时才适用。
因此,当您想要复制相同类型的容器时,请使用复制构造函数,就像在这里所做的那样;对于更一般的范围,使用范围构造函数。
发布于 2015-05-09 02:11:00
除了上面的答案之外,还有另外一个重要的考虑因素,如果您关心的是最后的CPU周期和代码字节。
当使用复制构造函数时,它为库方法提供了使用完整源向量的完全自由。
使用范围说明符,该方法必须执行更多的检查,并变得更一般化.正如您可以很容易想象的那样,范围的结束可能与源向量的结束不一样。
让我们假设我们正在开发库代码,并查看其中的区别:
一个编译器作者可能会想出更多的观点。
https://stackoverflow.com/questions/30121228
复制相似问题