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

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


去重单独写出来:其中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;
}

执行结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值