C++ vector总结
目录
介绍
向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。
在 vector 容器中,根据下标随机访问某个元素的时间是常数,在尾部添加一个元素的时间大多数情况下也是常数,总体来说速度很快。
在中间插入或删除元素时,因为要移动多个元素,因此速度较慢,平均花费的时间和容器中的元素个数成正比。
常用函数
成员函数 |
作 用 |
vector() |
无参构造函数,将容器初始化为空 |
vector(int n) |
将容器初始化为有 n 个元素 |
vector(int n, const T & val) |
假定元素的类型是 T,此构造函数将容器初始化为有 n 个元素,每 个元素的值都是 val |
vector(iterator first, iterator last) |
first 和 last 可以是其他容器的迭代器。一般来说,本构造函数初始化的结果就是将 vector 容器的内容变成与其他容器上的区间 [first, last) —致 |
void assign(int n,const T& x) |
设置向量中第n个元素的值为x |
void clear() |
删除所有元素 |
bool empty() |
判断容器是否为空 |
void pop_back() |
删除容器末尾的元素 |
void push_back( const T & val) |
将 val 添加到容器末尾 |
int size() |
返回容器中元素的个数 |
Int capacity() |
当前vector分配的大小 |
reference at(int pos) |
返回pos位置元素的引用 |
T & front() |
返回容器中第一个元素的引用 |
T & back() |
返回容器中最后一个元素的引用 |
iterator begin() |
返回向量头指针,指向第一个元素 |
iterator end() |
返回向量尾指针,指向向量最后一个元素的下一个位置 |
reverse_iterator rbegin() |
反向迭代器,指向最后一个元素 |
reverse_iterator rend() |
反向迭代器,指向第一个元素之前的位置 |
iterator insert(iterator i, const T & val) |
将 val 插入迭代器 i 指向的位置,返回 i |
iterator insert( iterator i, iterator first, iterator last) |
将其他容器上的区间 [first, last) 中的元素插入迭代器 i 指向的位置 |
iterator erase(iterator i) |
删除迭代器 i 指向的元素,返回值是被删元素后面的元素的迭代器 |
iterator erase(iterator first, iterator last) |
删除容器中的区间 [first, last) |
void swap( vector <T> & v) |
将容器自身的内容和另一个同类型的容器 v 互换 |
函数实例
1、初始化vector
(1) vector<int> a(10); //定义了10个整型元素的向量(尖括号中为元素类型名,它可以是任何合法的数据类型),但没有给出初值,其值是不确定的。
(2)vector<int> a(10,1); //定义了10个整型元素的向量,且给出每个元素的初值为1
(3)vector<int> a(b); //用b向量来创建a向量,整体复制性赋值
(4)vector<int> a(b.begin(),b.begin+3); //定义了a值为b中第0个到第2个(共3个)元素
(5)int b[7]={1,2,3,4,5,9,8};
vector<int> a(b,b+7); //从数组中获得初值
2、遍历
#include <string>
#include <cctype>
using namespace std;
int main() {
vector<int> myVector(10, 22);
//通过下角标遍历。
for (auto i = 0; i < myVector.size(); i++)
{
cout << " " << myVector[i];
}
cout << "\n";
myVector.push_back(44);
//通过迭代器遍历
for (auto i = myVector.begin(); i != myVector.end(); i++)
{
cout << " " << *i;
}
cout << "\n";
return 0;
}
3、修改元素的值
// list::sort
#include <iostream>
#include <vector>
#include <string>
#include <cctype>
using namespace std;
int main() {
vector<int> myVector(10, 22);
//通过下角标遍历。
for (auto i = 0; i < myVector.size(); i++)
{
myVector[i]=55;
}
cout << "\n";
//通过下角标遍历。
for (auto i = 0; i < myVector.size(); i++)
{
cout << " " << myVector[i];
}
cout << "\n";
myVector.push_back(44);
//通过迭代器遍历修改元素的值。
for (auto i = myVector.begin(); i != myVector.end(); i++)
{
if (*i == 55)
{
*i = 33;
}
}
cout << "\n";
for (auto i = myVector.begin(); i != myVector.end(); i++)
{
cout << " " << *i;
}
return 0;
}
4、删除元素
#include <iostream>
#include <vector>
#include <string>
#include <cctype>
using namespace std;
int main() {
vector<int> myVector = {1,2,3,4,5,6,7,8,9,11};
//通过下角标删除。
for (auto i = 0; i < myVector.size(); i++)
{
if (i == 4)
{
myVector.erase(myVector.begin()+4);
}
}
cout << "\n";
//通过迭代器遍历删除。
for (auto i = myVector.begin(); i != myVector.end();)
{
if (*i == 7)
{
i=myVector.erase(i);
}
else
{
i++;
}
}
cout << "\n";
for (auto i = myVector.begin(); i != myVector.end();i++)
{
cout << " " << *i;
}
cout << "\n";
return 0;
}
5、排序
// list::sort
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool compar(int a, int b)
{
return a > b;
}
int main() {
vector<int> myVector = { 1,2,4,3,5,6,7,8,9,11 };
sort(myVector.begin(), myVector.end());
for (auto i = myVector.begin(); i != myVector.end(); i++)
{
cout << " " << *i;
}
cout << "\n";
sort(myVector.begin(), myVector.end(),compar);
for (auto i = myVector.begin(); i != myVector.end(); i++)
{
cout << " " << *i;
}
cout << "\n";
return 0;
}
文章来源: wanghao.blog.csdn.net,作者:AI浩,版权归原作者所有,如需转载,请联系作者。
原文链接:wanghao.blog.csdn.net/article/details/107760009
- 点赞
- 收藏
- 关注作者
评论(0)