您的位置:首页 > 编程语言 > C语言/C++

C++ 动态数组类模板(向量容器)vector与STL用法总结

2018-02-15 15:03 776 查看
vector(向量)类模板定义在头文件vector中,提供五种构造函数,可以针对不同情况进行初始化:

vector<type> name;
//构造一个空的vector对象

vector<type> name(length);
//构造一个长度为length的vector对象,所有元素初始化为0

vector<type> name(length,n);
//构造一个长度为length的vector对象,所有元素初始化为n

vector<type> name(name1);
//复制构造,用已定义的对象name1初始化构造name

vector<type> name(array,array+length);
//构造一个长度为length+1的vector对象,并用数组初始化。array为type类型数据的地址(指针或数组名),从array指向的元素起向后依次对vector中的元素赋值。

vector类模板重载了赋值运算符=,允许同类型的vector对象相互赋值,对长度没有要求,即可以改变赋值目标对象的大小,使得赋值目标的长度和赋值源的长度(size())保持一致。若赋值目标的长度小于赋值源长度,则对其进行扩充,使得扩充后的capacity和赋值源的size保持一致。

vector的容量信息相关的成员函数:

size():返回当前对象中已存放(初始化)的元素的个数。

max_size():返回当前对象所能容纳的最大元素个数,取决于系统的硬件结构。

capacity():返回当前已经分配的空间所能容纳的元素个数。初始值为最初分配的空间大小(元素个数),当存放空间已满,再增加元素个数时,capacity在原来的基础上翻倍。

vector的访问对象的成员函数:

front():返回vector对象中的第一个元素

back():返回vector对象的最后一个元素

operator [ ](size_type,n)
:[ ]的重载,返回对象的第n+1个元素

在vector中插入元素的方法

push_back(const T&):在向量末尾插入一个T类型的元素,size+1,capacity如果不足则翻倍。

insert(iterator it,const T&):在it所指的位置前插入新元素。

insert (iterator it, size_type n,const T&X):在it所指位置前插入n个值为X的T类数据。

在vector中声明迭代器

vector类包含了一个typedef iterator,这是一个public成员。通过iterator,可以声明向量中的迭代 器。例如,语句:

vector<int>::iterator intVeciter;
将intVecIter声明为int类型的向量容器迭代器。

因为iterator是一个定义在vector类中的typedef,所以必须使用容器名(vector)、容器元素类型 和作用域符来使用iterator。

表达式:

++intVecIter


将迭代器intVecIter加1,使其指向容器中的下一个元素。表达式:
*intVecIter


返回当前迭代器位置上的元素。

迭代器上的这些操作和指针上的相应操作是相同的。

vector_name.begin()返回指向第一个元素的迭代器,vector_name.end()返回指向末尾元素后一位的迭代器。

使用STL库函数输出向量对象

正向输出,每个元素后输出一个ch:
copy(at.begin(), at.end(), ostream_iterator <type>(cout,"ch"));


逆向输出,每个元素后输出一个ch:
reverse_copy(at.begin(), at.end(), ostream_iterator <type>(cout,"ch"));


使用上述代码时,应include头文件functional和iterator:前者对应copy函数,后者对ostream_iterator进行定义。

在向量中删除对象

pop_back(const T&):删除向量中的最后一个元素,所分配的空间仍然保留

erase(iterator it):删除it所指向的元素

clear():删除向量中的所有元素,empty()返回true。

测试代码(部分):

#include <vector>
#include <functional>
#include <iterator>
#include <algorithm>
using namespace std;

int main()
{
int ay[10] = {1,2,3,4,5,6,7,8,9};
int *p = ay;
vector<int> at(ay,ay + 7);
vector<int> as(p,p + 3);
copy(as.begin(),as.end(),ostream_iterator <int>(cout,"*"));
cout << endl;
at.pop_back();
cout << endl << at.size() << endl << at.capacity() << endl;
as = at;
copy(at.begin(),at.end(),ostream_iterator <int>(cout,"-"));
cout << endl << as.size() << endl << as.capacity() << endl;
cout << *(at.begin()+1) << endl << *at.end() << endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: