(2)一个简单的例子
从txt中读入以空格为单位的字符串,并对其进行去重排序输出
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
int main()
{
ifstream in("E:\\algorithmZack\\testString\\name.txt"); // fstream
string str;
vector<string> vec; //vector
while(getline(in, str)) // string
{
while(str.find_first_of(' ') != -1)
{
vec.push_back(str.substr(0, str.find_first_of(' ')));
str = str.substr(str.find_first_of(' ')+1);
}
vec.push_back(str);
}
sort(vec.begin(), vec.end()); // algorithm
/*注意这里去掉了重复元素 但vec大小没变,在其后面添加了两个空格。但是对于int,则将重复的元素放在后面 */
vector<string>::iterator it = unique(vec.begin(), vec.end()); // algorithm 返回去重后最后一个元素
copy(vec.begin(), it, ostream_iterator<string>(cout, "\n")); // iterator ostream_iterator<string> iterator
cout << endl;
copy(vec.begin(), vec.end(), ostream_iterator<string>(cout, "\n"));
/*for(vector<string>::iterator iter = vec.begin(); iter != vec.end(); iter++)
{
cout << *iter << " ";
}
cout << endl;*/
return 0;
}
注意:这里的unique去掉了vector<string>中重复元素,但其大小没有变,重复的元素用空格代替放在其后面。但是对已vector<int>,则将重复的元素放在后面。
(3)copy函数
Copy函数包含在头文件#include<iterator>头文件中。主要有三个常用的用法
copy(IteratorInput it1, IteratorInput it2, IteratorOnputit3) // algorithm
1: 用数组对vector<T>进行赋值
2:用cin对vector<T>进行赋值
3:将vector<T> 进行输出
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
vector<int> vec;
cout << "hello world!!" << endl;
//int a[] = {3,2,1,1,2,3};
//copy(a, a+6, back_inserter(vec));
//vec.resize(6);
// copy(a, a+6, vec.begin());
copy(istream_iterator<int>(cin), istream_iterator<int>(), back_inserter(vec));
copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, " "));
cout << endl;
sort(vec.begin(), vec.end());
vector<int>::iterator it = unique(vec.begin(), vec.end());
copy(vec.begin(), it, ostream_iterator<int>(cout, " ")); // 输出
return 0;
}