版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37964547/article/details/81517499
一、vector
1、基本介绍
在C++中,vector是一个十分有用的序列式容器,它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。
2、用法介绍
为了使用vector,必须包含头文件。另,vector属于std命名空间,因此需要通过命名限定,可以有如下三种方式,后两种方式更好,因为未引入的无关的内容。
(1) using namespace std;
(2)using std::vector;
(3)std::vector<int> vec;
vector的基本操作
- vec.begin() //指向迭代器中第一个元素。
- vec.end() //指向迭代器中末端元素的下一个,指向一个不存在元素。 -
- vec.push_back(elem) //在尾部加入一个数据。
- vec.pop_back() //删除最后一个数据。
- vec.capacity() //vector可用空间的大小。
- vec.size() //返回容器中数据个数。
- vec.empty() //判断容器是否为空。
- vec.front() //传回第一个数据。
- vec.back() //传回最后一个数据,不检查这个数据是否存在。
- vec.at(index) //传回索引idx所指的数据,如果idx越界,抛出out_of_range
- vec.clear() //移除容器中所有数据。
- vec.erase(iterator) //删除pos位置的数据,传回下一个数据的位置。
- vec.erase(begin,end) //删除[beg,end)区间的数据,传回下一个数据的位置。注意:begin和end为iterator
- vec.insert(position,elem) //在pos位置插入一个elem拷贝,传回新数据位置。
- vec.insert(position,n,elem) //在pos位置插入n个elem数据,无返回值。
- vec.insert(position,begin,end) //在pos位置插入在[beg,end)区间的数据,无返回值
3、用法示例
这里首先创建一个vector对象:
vector<int> vec;
int为数组元素的类型,vec为动态数组的名字
当然我们也可以利用vector创建二维数组:
vector<vector<int>> _v;
现在就是介绍vector的基本操作了
(1)尾部插入元素
void Vectest()
{
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vec.push_back(4);
vec.push_back(5);
vec.push_back(6);
vector<int>::iterator it = vec.begin();
while (it != vec.end())
{
cout << *it<<" ";
it++;
}
cout << endl;
}
int main()
{
Vectest();
system("pause");
return 0;
}
结果显示:
(2)删除元素
(3)查看vec数组中元素的个数和容量
(4)打印第一个元素和最后一个元素
(5)删除pos位置的数据
(6)删除指定区间的元素
(7)其他三种插入方式:
insert() 函数有以下三种用法:
1、在指定位置位置前插入值为val的元素,返回指向这个元素的迭代器
2、在指定位置位置前插入num个值为val的元素
3、在指定位置位置前插入区间[begin, end)的所有元素
void Vectest()
{
vector<int> vec(4,0);
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vec.push_back(4);
vec.push_back(5);
vec.push_back(6);
vector<int>::iterator it = vec.begin();
while (it != vec.end())
{
cout << *it<<" ";
it++;
}
cout << endl;
vector<int>::iterator begin = vec.begin();
vector<int>::iterator end= vec.begin()+3;
vec.insert(begin, 10);
cout << "在begin位置插入元素10:";
it = vec.begin();
while (it != vec.end())
{
cout << *it << " ";
it++;
}
cout << endl;
vec.insert(end, 3, 9);
cout << "在end位置插入3个9:";
it = vec.begin();
while (it != vec.end())
{
cout << *it << " ";
it++;
}
cout << endl;
(8)判断数组是否为空和清除数组元素
void Vectest()
{
vector<int> vec(4,0);
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vec.push_back(4);
vec.push_back(5);
vec.push_back(6);
vector<int>::iterator it = vec.begin();
while (it != vec.end())
{
cout << *it<<" ";
it++;
}
cout << endl;
if (vec.empty())
cout << "数组为空" << endl;
else
cout << "数组不为空" << endl;
vec.clear();
it = vec.begin();
while (it != vec.end())
{
cout << *it << " ";
it++;
}
cout << endl;
}
(9)at和assign函数:
void Vectest()
{
vector vec,tmp;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vec.push_back(4);
vec.push_back(5);
vec.push_back(6);
cout << "vec中的内容:";
vector<int>::iterator it = vec.begin();
while (it != vec.end())
{
cout << *it<<" ";
it++;
}
cout << endl;
cout << "vec.at(5):" << vec.at(5) << endl;
tmp.assign(vec.begin(), vec.end());
cout << "将vec中的内容复制到tmp中,tmp中的内容:";
it = vec.begin();
while (it != vec.end())
{
cout << *it << " ";
it++;
}
cout << endl;
cout << "赋n个值为x的元素到当前vector中,当前vector会清除掉容器中之前的内容:";
vec.assign(5, 3);
it = vec.begin();
while (it != vec.end())
{
cout << *it << " ";
it++;
}
cout << endl;
}
(10)反向迭代器
void Vectest()
{
vector<int> vec,tmp;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vec.push_back(4);
vec.push_back(5);
vec.push_back(6);
cout << "vec中的内容:";
vector<int>:: reverse_iterator r_it = vec.rbegin();
while (r_it != vec.rend())
{
cout << *r_it << " ";
r_it++;
}
cout << endl;
cout << "size:" << vec.size() << endl;
cout << "capacity:" << vec.capacity() << endl;
cout << "vec.rbegin:" << *vec.rbegin() << endl;
}