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

  • 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;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值