#4431. vector相关函数
vector相关函数
1、vector向量:向量是一个能够存放任意类型的动态数组(元素个数可变)
| 函数名 | 函数说明 |
|---|---|
| push_back(元素) | 增加一个元素到向量后面 |
| insert(位置,元素) | 插入元素到向量的指定位置(地址) |
| insert(位置,个数n,元素) | 插入n个相同的元素到指定位置 |
| insert(位置,向量头指针 first,向量尾指针end) | 将另一个向量从first位置开始到end结束(不包括end)之间的内容 插入该向量的指定位置。 |
| erase(位置) | 删除指定位置的元素 |
| erase(开始位置,结束位置 ) | 删除向量中(first,last)中元素 |
| pop_back() | 弹出(删除)向量的最后一个元素 |
| clear() | 清除向量所有元素,size()变为0 |
| 运算符[i] | 取向量下标为i的元素 |
| front() | 取向量第一个元素 |
| back() | 取向量最后一个元素 |
| begin() | 返回向量头指针(迭代器),指向第一个元素 |
| end() | 返回向量尾指针,指向向量最后一个元素的下一个位置 |
| rbegin() | 反向迭代器,指向最后一个元素 |
| rend() | 反向迭代器,指向第一个元素之前的位置 |
| size() | 返回向量中实际元素的个数。 |
| resize(大小) | 重新设定向量的大小,也就是可以保存元素的个数。 |
| max_size() | 得到vector最大可以是多大。 |
| empty() | 判断向量是否为空,等价于size()为0。 |
| swap() | 交换两个同类型向量的数据。 |
vector相关操作
1. 创建
1、vector创建一个空的
vector<int> v;
2、创建已经有一定长度的
vector<int> v(10);
3、创建时将数组全部初始化为同一个值
vector<int> v(5,10) 5个元素都为10
4、借助其他容器初始化
int x[5] = {10,2,4,5,6};
vector<int> v(x,x+5); 复制普通数组
vector<int> a(5,2);
复制 vector数组
vector<int> v(a.begin(),a.end());
二维动态数组创建
1、vector<int> v[5];
2、vector<vector<int> > v(5);
3、vector<vector<int>> a(n, vector<int>(m)); 创建n行m列
2. 输入
利用push_back()实现输入
vector<int> a; //创建一个空的数组
int x;
for(int i=0;i<3;i++){
cin >> x;
a.push_back(x); //搭配push_back
}
利用 下标实现输入
vector<int> a(3); //创建一个有长度的数组
for(int i=0;i<3;i++){
cin >> a[i]; //利用下标
}
特别强调,没有长度的vector不能使用下标输入
vector相关函数
1. push_back(元素)
向量尾部添加一个元素。
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v;
v.push_back(10); // 向vector添加元素10
cout << "v[0]: " << v[0] << endl; // 输出第一个元素
return 0;
}
2. insert(位置,元素)
在指定位置插入元素。
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v = {1, 2, 3};
v.insert(v.begin() + 1, 100); // 在位置1插入100
for (int x : v) {
cout << x << " "; // 输出向量中的所有元素
}
return 0;
}
3. insert(位置,个数n, 元素)
在指定位置插入多个相同的元素。
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v = {1, 2, 3};
v.insert(v.begin() + 1, 3, 100); // 在位置1插入3个100
for (int x : v) {
cout << x << " "; // 输出向量中的所有元素
}
return 0;
}
4. insert(位置,向量头指针 first, 向量尾指针 end)
将一个向量的内容插入到另一个向量中。
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v1 = {1, 2, 3};
vector<int> v2 = {100, 200};
v1.insert(v1.begin() + 1, v2.begin(), v2.end()); // 插入v2中的元素到v1的指定位置
for (int x : v1) {
cout << x << " "; // 输出v1中的所有元素
}
return 0;
}
5. erase(位置)
删除指定位置的元素。
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v = {1, 2, 3, 4};
v.erase(v.begin() + 1); // 删除第二个元素
for (int x : v) {
cout << x << " "; // 输出剩余的元素
}
return 0;
}
6. erase(开始位置,结束位置)
删除向量中的一段元素。
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v = {1, 2, 3, 4, 5};
v.erase(v.begin() + 1, v.begin() + 4); // 删除从第二个到第四个元素(不包括第四个)
for (int x : v) {
cout << x << " "; // 输出剩余的元素
}
return 0;
}
7. pop_back()
删除向量的最后一个元素。
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v = {1, 2, 3, 4};
v.pop_back(); // 删除最后一个元素
for (int x : v) {
cout << x << " "; // 输出剩余的元素
}
return 0;
}
8. clear()
清空向量的所有元素。
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v = {1, 2, 3, 4};
v.clear(); // 清空向量
cout << "向量清空后的大小: " << v.size() << endl; // 输出清空后的大小
return 0;
}
9. 运算符[]
访问向量中的元素。
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v = {10, 20, 30};
cout << "v[1]: " << v[1] << endl; // 输出第二个元素
return 0;
}
10. front()
获取向量的第一个元素。
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v = {1, 2, 3};
cout << "第一个元素: " << v.front() << endl; // 输出第一个元素
return 0;
}
11. back()
获取向量的最后一个元素。
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v = {1, 2, 3};
cout << "最后一个元素: " << v.back() << endl; // 输出最后一个元素
return 0;
}
12. begin()
获取指向向量第一个元素的迭代器。
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v = {1, 2, 3};
cout << "第一个元素: " << *v.begin() << endl; // 解引用迭代器输出第一个元素
return 0;
}
13. end()
获取指向向量末尾的迭代器。
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v = {1, 2, 3};
cout << "最后一个元素: " << *(v.end() - 1) << endl; // 解引用最后一个元素
return 0;
}
14. rbegin()
获取反向迭代器,指向最后一个元素。
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v = {1, 2, 3};
cout << "最后一个元素使用rbegin: " << *v.rbegin() << endl; // 输出最后一个元素
return 0;
}
15. rend()
获取反向迭代器,指向第一个元素之前的位置。
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v = {1, 2, 3};
cout << "第一个元素之前的位置使用rend: " << *v.rend() << endl;
return 0;
}
16. size()
返回向量中元素的个数。
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v = {1, 2, 3};
cout << "向量的元素个数: " << v.size() << endl; // 输出元素个数
return 0;
}
17. resize(大小)
调整向量的大小。
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v = {1, 2, 3};
v.resize(5, 100); // 将大小调整为5,新增的元素值为100
for (int x : v) {
cout << x << " "; // 输出调整大小后的向量
}
return 0;
}
18. max_size()
获取向量可以容纳的最大元素个数。
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v;
cout << "向量的最大大小: " << v.max_size() << endl; // 输出最大大小
return 0;
}
19. empty()
判断向量是否为空。
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v = {1, 2, 3};
cout << "向量是否为空? " << (v.empty() ? "是" : "否") << endl; // 输出向量是否为空
return 0;
}
20. swap()
交换两个向量的数据。
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v1 = {1, 2, 3};
vector<int> v2 = {4, 5, 6};
v1.swap(v2); // 交换v1和v2的内容
for (int x : v1) {
cout << x << " "; // 输出v1的新内容
}
return 0;
}