我正在阅读 Accelerated C++,对于下面发布的问题,我需要一些建议。
这段代码有什么作用?
vector<int>u(10,100) vector<int>v; copy(u.begin(), u.end(), v.end());
提供 2 种可能的方法来纠正程序,并列出其优缺点。
第一部分非常简单,但我在第二部分需要帮助。我提供了 3 种方法,我想知道是否还有其他可能的解决方案。
另外,我不确定我的方法的优缺点。我做了一个尝试,所以请给我你的意见。
copy()
std::vector<int> u(10, 100);
std::vector<int> v;
std::vector<int> w ;
std::vector<int> x ;
std::copy(u.begin(), u.end(), back_inserter(v)); // 1st way of doing
好处
std::copy()
不会改变迭代器的值- 由于 的参数
std::copy()
不依赖于具体的容器,所以代码可以和不同的容器复用
缺点
std::back_inserter()
仅适用于顺序容器,因此不能与地图一起使用- 将错误的迭代器值分配给第三个参数
std::copy()
不会导致编译器错误,但程序的行为可能会有所不同
insert()
w.insert(w.end(), u.begin(), u.end() );
好处
insert()
可与大多数容器一起使用
缺点
一个都想不出来
push_back()
for ( std::vector<int>::const_iterator it = w.begin(); it != w.end(); ++it )
{
x.push_back( *it );
}
好处
一个都想不出来
缺点
- 慢于
std::copy()
或vector::insert()
。
我的方法正确吗?还有哪些其他可能的解决方案?