vector中 迭代器的使用 以及元素的去重、排序、插入、删除操作。 【小笔记】

来源:互联网 发布:数据统计权威网站 编辑:程序博客网 时间:2024/04/28 20:44

看详细总结的请绕行,我写的只有实现过程。


去重单独写出来:其中it是迭代器 

vector<int> G;vector<int> ::iterator it;it = unique(G.begin(), G.end()), G.erase(it, G.end());//去重


一维vector的修改:

#include <cstdio>#include <algorithm>#include <vector>#include <map>#include <string>#include <set>using namespace std;vector<int> G;vector<int> ::iterator it;//迭代器int main(){    G.push_back(10);    G.push_back(3);    G.push_back(4);    printf("容器元素\n");    for(int i = 0; i < G.size(); i++)        printf("%d ", G[i]);    printf("\n\n");    printf("我们想把元素升序排列\n");    sort(G.begin(), G.end());//排序    printf("操作结果\n");    for(int i = 0; i < G.size(); i++)        printf("%d ", G[i]);    printf("\n\n");    printf("我们想插入元素5 并保持元素的升序排列\n");    it = upper_bound(G.begin(), G.end(), 5);//查询比插入值大的第一个位置    G.insert(it, 5);//插入it位置前面    printf("操作结果\n");    for(int i = 0; i < G.size(); i++)        printf("%d ", G[i]);    printf("\n\n");    printf("我们想删除元素4 并保持元素的升序排列\n");    it = find(G.begin(), G.end(), 4);//查找元素 如果找不到返回G.end()    G.erase(it);//删除元素 后续元素向前移动    printf("操作结果\n");    for(int i = 0; i < G.size(); i++)        printf("%d ", G[i]);    printf("\n");    return 0;}



执行结果:





二维vecotr的操作:这里的排列在cmp里面实现【我默认的是按s升序排列】

#include <cstdio>#include <algorithm>#include <vector>#include <map>#include <string>#include <set>using namespace std;struct Node{    int s, e;};vector<Node> G;vector<Node> ::iterator it;//迭代器bool cmp(Node a, Node b)//以起点升序排列{    return a.s < b.s;}int main(){    G.push_back((Node){10, 5});    G.push_back((Node){3, 6});    G.push_back((Node){4, 7});    printf("容器元素\n");    for(int i = 0; i < G.size(); i++)        printf("%d-%d ", G[i].s, G[i].e);    printf("\n\n");    printf("我们想把元素升序排列\n");    sort(G.begin(), G.end(), cmp);//排序    printf("操作结果\n");    for(int i = 0; i < G.size(); i++)        printf("%d-%d ", G[i].s, G[i].e);    printf("\n\n");    printf("我们想插入元素[5,6] 并保持元素的升序排列\n");    Node E1 = {5, 6};    it = upper_bound(G.begin(), G.end(), E1, cmp);//查询比插入值起点大的第一个位置    G.insert(it, E1);//插入it位置前面    printf("操作结果\n");    for(int i = 0; i < G.size(); i++)        printf("%d-%d ", G[i].s, G[i].e);    printf("\n\n");    printf("我们想删除元素[4,7] 并保持元素的升序排列\n");    //find()第三个参数只能传入一个值 所以查询时可以采用遍历的方式    int pos;    for(int i = 0; i < G.size(); i++)    {        if(G[i].s == 4 && G[i].e == 7)        {            pos = i;            break;        }    }    G.erase(pos + G.begin());//删除元素 后续元素向前移动    printf("操作结果\n");    for(int i = 0; i < G.size(); i++)        printf("%d-%d ", G[i].s, G[i].e);    printf("\n\n");    return 0;}

执行结果:


0 0
原创粉丝点击