C++学习之vector重复元素的去除和求vector中最大最小元素及其索引

来源:互联网 发布:32寸网络电视价格 编辑:程序博客网 时间:2024/05/16 15:48

1.使用unique函数

// UniqueVector.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <iostream>#include <algorithm>#include <vector>using namespace std;int main(){    vector<int> v;    cout << "please input the number of vector's element" << endl;    int number;    cin >> number;    for (int i = 0; i < number; i++)    {        int temp;        cin >> temp;        v.push_back(temp);    }    sort(v.begin(),v.end());    v.erase(unique(v.begin(), v.end()), v.end());    //unique()函数将重复的元素放到vector的尾部 然后返回指向第一个重复元素的迭代器 再用erase函数擦除从这个元素到最后元素的所有的元素    for (int i = 0; i < v.size(); i++)    {        cout << v[i] << " ";    }    system("pause");    return 0;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

2.使用set

#include <iostream>#include <vector>#include <set>#include <iterator>using namespace std;int main(){    set<int>s;    cout << "please input the number of vector's element " << endl;    int n;    cin >> n;    for (int i = 0; i < n; i++)    {        int temp;        cin >> temp;        s.insert(temp);    }    vector<int>v;    insert_iterator<vector<int>> in_it(v, v.begin());    copy(s.begin(), s.end(), in_it);    for (vector<int>::iterator it = v.begin(); it != v.end(); it++)    {        cout << *it << " ";    }    system("pause");    return 0;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

在将set中的元素拷贝到vector中的时候 使用copy函数的时候 要注意第三个参数 copy(s.begin(), s.end(), in_it); 刚刚开始的时候使用v.begin()作为第三个参数 但是程序曝出了Not dereferencable vector不可以解析的错误 原因是 
如果使用的是v.begin()则vector的长度是没有拷贝之前相同的 所以如果在构造vector的时候是一个空的vector 那么当拷贝时会访问v[0] v[1]这样的元素 
所以会产生错误 

在程序中使用了insert_iterator

转载自:http://blog.csdn.net/HE19930303/article/details/50579996

3、求vector的最大值、最小值及其索引

利用函数 max_element,min_element,distance可以获取Vector中最大、最小值的值和位置索引

  1. #include <vector>  
  2. #include <algorithm>  
  3. #include <iostream>  
  4.   
  5. int main()  
  6. {  
  7.     std::vector<double> v {1.0, 2.0, 3.0, 4.0, 5.0, 1.0, 2.0, 3.0, 4.0, 5.0};  
  8.   
  9.     std::vector<double>::iterator biggest = std::max_element(std::begin(v), std::end(v));  
  10.     std::cout << "Max element is " << *biggest<< " at position " << std::distance(std::begin(v), biggest) << std::endl;  
  11.   
  12.     auto smallest = std::min_element(std::begin(v), std::end(v));  
  13.     std::cout << "min element is " << *smallest<< " at position " << std::distance(std::begin(v), smallest) << std::endl;  
  14. }  
  15.   
  16.   
  17. 输出:  
  18.   
  19. Max element is 5 at position 4  
  20. min element is 1 at position 0</span>  
参考自:http://blog.csdn.net/yangyangyang20092010/article/details/47863477

0 0
原创粉丝点击