题目是这样的:
编写程序,使用unique_copy将一个容器对象中的元素拷贝到一个空的vector容器中。(题目有微调。解决原题目中的list排序问题可以使用list自身所带的sort函数,而不使用generic algorithm中的sort函数。)
原有答案如下:
#include <iostream>
#include <list>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int ia[] = {1, 2, 3, 4, 100, 5, 100};
list<int> ilst(ia, ia+7);
vector<int> ivec;
unique_copy(ilst.begin(), ilst.end(), back_inserter(ivec));
cout << "vector:" << endl;
for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)
cout << *iter << " ";
cout << endl;
return 0;
}
这个答案出现的结果是有误的,其原因主要有两点:
(1)unique_copy无法只拷贝ilst中所存在的惟一值,如上题,计划中的结果为“1 2 3 4 100 5”,实际的结果却是“1 2 3 4 100 5 100”。造成这种结果的原因是,没有将ilst中的值进行排序。解决方法是,在运用unique_copy之前增加sort排序函数。
(2)不能对list器使用sort函数。因为sort函数只对随机迭代器有作用,而list的迭代器不是随机迭代器,其是可读可写遍历迭代器。解决办法是,可将list容器更改为vector容器。
更改后的源码如下,可以正常实现题目所列的要求:
#include <iostream>
#include <list>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int ia[] = {1, 2, 3, 4, 100, 5, 100};
vector<int> ilst(ia, ia+7);
vector<int> ivec;
sort(ilst.begin(), ilst.end());
unique_copy(ilst.begin(), ilst.end(), back_inserter(ivec));
cout << "vector:" << endl;
for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)
cout << *iter << " ";
cout << endl;
return 0;
}
参考文档:http://bbs.csdn.net/topics/340149233
原文链接: https://www.cnblogs.com/lance-ehf/archive/2013/05/17/3083648.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/88898
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!