C++(10)

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 }
~     

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_41392061

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值