文章目录
- 什么是vector
- vector与普通顺序表不同的点
- vector的成员函数
- operator=
- operator[]
- begin与end与iterator
- size()
- capacity
- resize
- empty
- reserve
- push_back
- pop_back
- insert
- erase
- swap
- clear
- 成员变量
- 总结
什么是vector
vector:是数据结构里面的顺序表,开辟一段连续的空间存储内容
vector与普通顺序表不同的点
1、因为是用c++写的,里面包含了模版,可以是自定义类型,不止内置类型。
2、自身提供了交换函数
3、c++11中引入了auto 可以使用范围for遍历
····
vector的成员函数
operator=
赋值操作
因为只重载了一个版本
vector类型=vector类型
如果其是其他类型会隐式类型转化
operator[]
[]:下标查找
#include"vector.h"
#include<vector>
using namespace std;
int main()
{
//dabai::test1();
vector<int> arr;
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
//arr.resize(2);
arr.reserve(100);
cout << arr[1]<< endl;
return 0;
}
begin与end与iterator
iterator:迭代器,vector中是用模版指针定义的
begin:指向第一个元素
end:指向最后一个元素
使用方式:
#include <iostream>
#include <vector>
int main ()
{
std::vector<int> myvector;
for (int i=1; i<=5; i++) myvector.push_back(i);
std::cout << "myvector contains:";
for (std::vector<int>::iterator it = myvector.begin() ; it != myvector.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
size()
size():计算有效长度为多少
使用方式:
#include"vector.h"
#include<vector>
using namespace std;
int main()
{
//dabai::test1();
vector<int> arr;
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
cout << arr.size() << endl;
return 0;
}
capacity
capacity:查当前顺序表中的容量
#include"vector.h"
#include<vector>
using namespace std;
int main()
{
//dabai::test1();
vector<int> arr;
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
cout << arr.capacity() << endl;
return 0;
}
resize
resize:设置容量
如果resize<size()那么会缩容,并且吧数据删掉
如果resize在size()和capacity()之间那么也是缩容,不删数据
如果resize>capacity()那么就是扩容
empty
检查顺序表中有没有内容
#include <iostream>
#include <vector>
int main ()
{
std::vector<int> myvector;
int sum (0);
for (int i=1;i<=10;i++) myvector.push_back(i);
while (!myvector.empty())
{
sum += myvector.back();
myvector.pop_back();
}
std::cout << "total: " << sum << '\n';
return 0;
}
reserve
reserve:扩容
push_back
尾插
#include"vector.h"
#include<vector>
using namespace std;
int main()
{
//dabai::test1();
vector<int> arr;
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
//arr.resize(2);
arr.reserve(100);
cout << arr[1]<< endl;
return 0;
}
pop_back
尾删
#include"vector.h"
#include<iostream>
#include<vector>
using namespace std;
int main()
{
//dabai::test1();
vector<int> arr;
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.pop_back();
arr.pop_back();
arr.pop_back();
arr.pop_back();
//arr.resize(2);
//arr.reserve(100);
cout << arr.size()<< endl;
return 0;
}
insert
指定位置插入
可以插入一个,也可以多个
因为他重载的是迭代器参数,避免了定死了类型
所以要传的是迭代器
#include"vector.h"
#include<iostream>
#include<vector>
using namespace std;
int main()
{
//dabai::test1();
vector<int> arr;
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.pop_back();
arr.pop_back();
arr.pop_back();
arr.pop_back();
arr.insert(arr.begin()+2, 30);
//arr.resize(2);
//arr.reserve(100);
cout << arr.size()<< endl;
return 0;
}
erase
删除指定位置的内容
重载的同样是迭代器
所以要传迭代器
#include"vector.h"
#include<iostream>
#include<vector>
using namespace std;
int main()
{
//dabai::test1();
vector<int> arr;
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.pop_back();
arr.pop_back();
arr.pop_back();
arr.pop_back();
arr.insert(arr.begin()+2, 30);
arr.erase(arr.begin() + 2);
//arr.resize(2);
//arr.reserve(100);
cout << arr.size()<< endl;
return 0;
}
swap
交换,跟vector类型的对象 交换所有东西
#include"vector.h"
#include<iostream>
#include<vector>
using namespace std;
int main()
{
//dabai::test1();
vector<int> arr;
vector<int> s;
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.pop_back();
arr.pop_back();
arr.pop_back();
arr.pop_back();
arr.insert(arr.begin()+2, 30);
arr.erase(arr.begin() + 2);
//arr.resize(2);
//arr.reserve(100);
s.swap(arr);
cout << arr.size()<< endl;
cout << s.size() << endl;
return 0;
}
clear
清除字符串内容
#include"vector.h"
#include<iostream>
#include<vector>
using namespace std;
int main()
{
//dabai::test1();
vector<int> arr;
vector<int> s;
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.push_back(11);
arr.pop_back();
arr.insert(arr.begin()+2, 30);
arr.erase(arr.begin() + 2);
//arr.resize(2);
//arr.reserve(100);
s.swap(arr);
cout << arr.size()<< endl;
cout << s.size() << endl;
s.clear();
cout << s.size() << endl;
return 0;
}
成员变量
都是迭代器,我这个是自己写的
并不是官方的名字
iterator _str;//首个元素的地址
iterator _size;//尾元素的地址
iterator _capacity;//容量
总结
跟普通的顺序表还是有区别的,总体变的好用了很多。
dp最大的噩梦