STL笔记一
【题目1】三句话实现:整数的输入,排序,输出:(by Sandy)
#include <iostream> #include <vector> #include <algorithm> #include <iterator> using namespace std; int main() { vector<int> v1((istream_iterator<int>(cin)),(istream_iterator<int>())); sort(v1.begin(),v1.end()); copy(v1.begin(),v1.end(),ostream_iterator<int>(cout," ")); return 0; }
【题目2】三句话实现:单词的输入,剔除其中重复的单词,并按字母顺序输出。
vector<string> v1((istream_iterator<string>(cin)),(istream_iterator<string>())); sort(v1.begin(),v1.end()); unique_copy(v1.begin(),v1.end(),ostream_iterator<string>(cout," "));
【woj1170】Problem 1170 – Sorting 重写了遍。
vector<int> v1((istream_iterator<int>(cin)),(istream_iterator<int>())); v1.erase(v1.end()-1); sort(v1.begin(),v1.end()); unique_copy(v1.begin(),v1.end(),ostream_iterator<int>(cout," "));
这题目用vector的效率不高,用list快些。
【总结】
明白Sandy的意思是让我练习下STL,我说了很久要学要学,但是好久之后依然还没动,被这个被那个事情给耽搁着。前天晚上和Sandy的聊天,让我明白了,这些知识并不是要等某一天某一大段时间再去学习,而是点滴积累的。
以上的两道题目牵涉到的有:(这几天总结下)
- 输入流迭代器
- sort
- vector,list,deque
- unique_copy 和 copy
5 Comments are ready?
别别别,我不敢当。这个例子是很多地方可以见到的。那个单词的例子,你去翻翻之前我给你的STL的书,上面有,只不过我稍微简化了下。
。除非实在必要。
不过是希望你能了解STL的威力罢了,它不是什么空架子,它是工业标准,用好了的话将是你履历表上非常浓重的一笔。
还有,别再写:
for(int i=1;i<(int)vector1.size();i++)
{
vector1[i]=xxx….
}
这种循环了……超别扭
[回复]
果然,wp的首页实在是太xxx了……也用不着这么补全标签吧。。
ubb王道,ubb王道。
[回复]
boluor 回复 于 八月 27th, 2009 at 00:52
我估计是more标签所致,回头研究下。
[回复]
还有啊,你后面那个woj p1170的题,怎么可能用list更快?用脑子稍微想想就会明白list做这道题是效率极低的。你怎么会冒出那种想法?
vector显然是效率最高的。你的那个代码比别人慢是因为istream的速度比scanf慢,绝对不是vector的原因。
我在woj上跑的结果:
你原来的代码: 95121 test1_1 1170 Accepted 内存:9312 耗时:1640 G++
改为list: 95122 test1_1 1170 Time Limit Exceed 内存:16880 耗时:2314 G++
改用scanf: 95123 test1_1 1170 Accepted 内存:9108 耗时:870 G++
继续改用printf:95124 test1_1 1170 Accepted 内存:9120 耗时:830 G++
看吧,你的list直接TLE了。
[回复]
boluor 回复 于 八月 27th, 2009 at 10:58
嗯,现在明白了。对list理解有问题之前。
[回复]
list不能用sort
[回复]
Sandy 回复 于 八月 27th, 2009 at 15:06
有list::sort();
[回复]
felix021 回复 于 八月 27th, 2009 at 15:11
re.
[回复]
http://acm.whu.edu.cn/blog/read.php?96
[回复]
boluor 回复 于 八月 27th, 2009 at 15:32
嗯,这个早下载看了。
[回复]