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;
}

猜你喜欢

转载自blog.csdn.net/black_kyatu/article/details/79328285