四时宝库

程序员的知识宝库

C++ vector总结(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;

}

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接