看详细总结的请绕行,我写的只有实现过程。
去重单独写出来:其中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;
}
执行结果: