案例1:v1、v2两个vector, 将v2后半部分内容赋给v1
区间成员函数版本:
std::vector<int> v1;
...
std::vector<int> v2;
...
v1.assign(v2.begin() + v2.size() / 2, v2.end());
单元素成员版本:
std::vector<int> v1;
...
std::vector<int> v2;
...
v1.clear();
for (auto iter = v2.begin() + v2.size() / 2; iter != v2.end(); ++iter)
{
v1.push_back(*iter);// 可能会导致多次分配空间
}
案例2:将int数组拷贝到vector前端
区间成员函数版本:
int data[10];
...
std::vector<int> v;
...
v.insert(v.begin(), data, data + 10);
单元素成员版本:
int data[10];
...
std::vector<int> v;
...
auto iter = v.begin();
for (int i = 0; i < 10; ++i)
{
iter = v.insert(iter, data[i]); // 返回插入的位置, 导致插入点后面元素的多次移动
++iter;
}
优先选择区间成员函数的优点:区间成员函数写起来更容易, 更能清除的表达你的意图, 而且它们表现出了更高的效率。