1.遍历去重排序
1 #include<iostream>
2 #include<cstdlib>
3 #include<ctime>
4 #include<vector>
5 #include<algorithm>
6 using namespace std;
7
8 void unique1(vector<int>& vec)
9 {
10 //遍历去重
11 for(vector<int>::iterator i = vec.begin();i != vec.end();++i){
12 for(vector<int>::iterator j = i+1;j != vec.end();){
13 if(*i == *j){
14 //去重
15 j = vec.erase(j);
16 }else{
17 ++j;
18 }
19 }
20 if(i == vec.end()) break;
21 }
22
23 }
24
25 void unique2(vector<int>& vec)
26 {
27 sort(vec.begin(),vec.end());
28 for(vector<int>::iterator it = vec.begin()+1;it != vec.end();){
29 if(*(it -1) == *it) it = vec.erase(it);
30 else ++it;
31 }
32
33 }
34 34
35 void unique3(vector<int>& vec)
36 {
37 sort(vec.begin(),vec.end());
38 vector<int> v(vec.size(),0);
39 v[0] = vec.front();
40
41 int idx = 1;
42
43 for(vector<int>::iterator it = vec.begin()+1;it != vec.end();++it){
44 if(v[idx-1] != *it) v[idx++] = *it;
45 }
46
47 v.resize(idx);
48 vec = std::move(v);
49 }
50
51 int main(void)
52 {
53 srand(time(0));
54 vector<int> vec(100,0);
55
56 /* for(int i =0;i<vec.size();i++){
57 vec[i] = rand() % 20;
58 }
59
60 for(int i =0;i<vec.size();i++){
61 cout << vec[i] << endl;
62 }
63
64 */
65
66 for(vector<int>::iterator it = vec.begin();it != vec.end();++it){
67 *it = rand() % 20;
68 }
69
70 /* for(vector<int>::iterator it = vec.begin();it != vec.end();){
71 it = vec.erase(it);//删除
72 }
73 */
74 // unique1(vec);
75 // unique2(vec);
76 unique3(vec);
77 for(vector<int>::iterator it = vec.begin();it != vec.end();++it){
78 cout << *it << endl;
79 }
80 return 0;
81 }
2.链表
1 #include<iostream>
2 #include<list>//链表
3
4 using namespace std;
5 /*
6 练习:统计数组中数字出现的个数.
7
8 */
9
10
11 int main(void)
12 {
13 list<int> l = {1,2,3};
14
15 l.push_back(4);
16 l.push_back(5);
17 l.push_back(6);
18 for(list<int>::iterator it = l.begin();it != l.end();){
19 it = l.erase(it);
20 }
21
22 for(list<int>::iterator it = l.begin();it != l.end();++it){
23 cout << *it << endl;
24 }
25
26 return 0;
27 }
28
~
3.练习:统计数组中数字出现的个数
#include<iostream>
#include<vector>
#include<map>
#include<algorithm>
#include<cstdlib>
using namespace std;
vector<pair<int,int> > count(const vector<int>& vec)
{
int max = *max_element(vec.cbegin(),vec.cend());
int min = *min_element(vec.cbegin(),vec.cend());
vector<int> v(max-min+1,0);//桶排序思想
for(int i =0;i<vec.size();++i){
v[vec[i]-min]++;//根据值转换为下标
}
vector<pair<int,int> > ret;
for(int i =0;i< v.size();++i){
if(v[i] > 0) ret.push_back({i+min,v[i]});
}
return ret;
}
int main(void)
{
vector<int> vec(20,0);
for(int i =0;i<vec.size();++i){
vec[i] = rand() % 10;
}
//记录
vector<pair<int,int> > ret = count(vec);
for(int i =0;i< vec.size();++i){
cout << vec[i] << endl;
}
for(int i =0;i < ret.size();++i){
cout << ret[i].first << ":" <<ret[i].second << endl;
}
return 0;
}
4.
1 #include<iostream>
2 #include<vector>
3 #include<string>
4 using namespace std;
5
6 /*
7 练习:vector<string> = {"aaa","bbb"};单词数组。需要做字典,要求排序
8 将所有首字母相同的单词集合在一起
9 vector<vector<string>>;
10
11
12 */
13
14 vector<vector<string>> countWords(const vector<string>& words)
15 {
16
17 vector<vector<string>> ret(26,{});
18 for(int i =0;i<words.size();++i){
19 ret[(words[i][0] - 'a')].push_back(words[i]);
20 }
21 return ret;
22 }
23
24
25 int main(void)
26 {
27
28 vector<string> vec = {"abandon","banana","china","avoid"};
29 vector<vector<string>> ret = countWords(vec);
30
31 for(int i =0;i<ret.size();++i){
32 if(ret[i].size() > 0){
33 cout << (char)(i + 'a') << ":";
34 for(int j =0;j < ret[i].size();++j){
35 cout << ret[i][j] << " ";
36 }
37 cout << endl;
38 }
39 }
40
41
42 return 0;
43 }
~