参考https://blog.csdn.net/tigerisland45/article/details/66477733
上面的文章写了四种方法,十分佩服大佬这种思维程度。
关键点:索引,STL,List(双向链表),Vector(容器)
有点看不懂上面文章里的方法二,知道个大概但是总是感觉有点懵,果断通过方式一自己写了一个带索引的解决方式。
#include<iostream>
using namespace std;
int pos2sno[1005]; // 位置上的学号
int sno2pos[1005]; // 学号所在位置
int main() {
int n,m,p,q;
cin >> n >>m;
for(int i = 1 ; i <= n ; i++) {
pos2sno[i] = i;
sno2pos[i] = i;
}
for(int i = 1; i <=m ; i++) {
cin >> p >> q;
int pos = sno2pos[p];
if(q>0) {
for(int j = pos; j < pos+q ; j++) {
pos2sno[j] = pos2sno[j+1];
sno2pos[pos2sno[j]] = j;
}
pos2sno[pos+q] = p;
sno2pos[p] = pos+q;
} else {
for(int j = pos; j > pos+q ; j--) {
pos2sno[j] = pos2sno[j-1];
sno2pos[pos2sno[j]] = j;
}
pos2sno[pos+q] = p;
sno2pos[p] = pos+q;
}
}
for(int i = 1 ; i <= n ; i++) {
cout << pos2sno[i] <<" ";
}
}
然后学习了一下List和Vector的用法和区别
需要记住的是LIst不能随意访问,只能从头或尾顺序访问。但是Vector可以。
迭代器的英文:iterator
list 容器可用的成员函数
| 成员函数 | 功能 |
| begin() |
返回指向容器中第一个元素的双向迭代器。 |
| end() |
返回指向容器中最后一个元素所在位置的下一个位置的双向迭代器。 |
| rbegin() |
返回指向最后一个元素的反向双向迭代器。 |
| rend() |
返回指向第一个元素所在位置前一个位置的反向双向迭代器。 |
| cbegin() |
和 begin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。 |
| cend() |
和 end() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。 |
| crbegin() |
和 rbegin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。 |
| crend() |
和 rend() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。 |
| empty() |
判断容器中是否有元素,若无元素,则返回 true;反之,返回 false。 |
| size() |
返回当前容器实际包含的元素个数。 |
| max_size() |
返回容器所能包含元素个数的最大值。这通常是一个很大的值,一般是 232-1,所以我们很少会用到这个函数。 |
| front() |
返回第一个元素的引用。 |
| back() |
返回最后一个元素的引用。 |
| assign() |
用新元素替换容器中原有内容。 |
| emplace_front() |
在容器头部生成一个元素。该函数和 push_front() 的功能相同,但效率更高。 |
| push_front() |
在容器头部插入一个元素。 |
| pop_front() |
删除容器头部的一个元素。 |
| emplace_back() |
在容器尾部直接生成一个元素。该函数和 push_back() 的功能相同,但效率更高。 |
| push_back() |
在容器尾部插入一个元素。 |
| pop_back() |
删除容器尾部的一个元素。 |
| emplace() |
在容器中的指定位置插入元素。该函数和 insert() 功能相同,但效率更高。 |
| insert() |
在容器中的指定位置插入元素。 |
| erase() |
删除容器中一个或某区域内的元素。 |
| swap() |
交换两个容器中的元素,必须保证这两个容器中存储的元素类型是相同的。 |
| resize() |
调整容器的大小。 |
| clear() |
删除容器存储的所有元素。 |
| splice() |
将一个 list 容器中的元素插入到另一个容器的指定位置。 |
| remove(val) |
删除容器中所有等于 val 的元素。 |
| remove_if() |
删除容器中满足条件的元素。 |
| unique() |
删除容器中相邻的重复元素,只保留一个。 |
| merge() |
合并两个事先已排好序的 list 容器,并且合并之后的 list 容器依然是有序的。 |
| sort() |
通过更改容器中元素的位置,将它们进行排序。 |
| reverse() |
反转容器中元素的顺序。 |
|
|
| |
|