C++STL学习(1)容器vector

注:博客内容均来自于对《C++标准库》侯捷,华中科技大学出版社一书的笔记。转载请注明出处。所有例程在Red Hat Linux 3.2.2-5版本上编译运行g++的版本是 g++ (GCC) 3.2.2 20030222

vector可以理解成一个动态数组,vector的结构可以用下图来理解。


vector的结构

vector的特性:

  • vector支持随机存储。可以在常数时间内存取任何一个元素
  • 基于vector的结构,vector在末尾添加元素和删除元素时间复杂度都可以O(1)内完成,在vector的中间或者开头插入或者删除元素因为会导致后面元素的移动所以时间复杂度为O(n)。

!vector容量很重要:

  • 一旦内存重新配置,和vector元素相关的所有references(引用),pointers(指针),iterators(迭代器)都会失效;
  • 内存重新配置很耗时间,所以如果知道容器要装多少的元素的时候,可以提前分配好。

一. vector的操作函数

1.1 构造、拷贝和析构


构造,拷贝和析构

  • 对于在创建对象之前就能预知vector长度的情况下,最好指明需要分配的内存大小,这样可以减少在插入元素过程中的分配内存操作(分配内存的操作比较耗时间)。

1.2 读取相关


读取相关

1.3 赋值


赋值

1.4 取元素


取元素

1.5 迭代器


迭代器

1.6 添加,移除相关


安插,移除相关

二. 例子

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <iterator>
using namespace std;

int main()
{
    vector<string> vt;
    vt.reserve(5);
    vt.push_back("Hello,");
    vt.push_back("how ");
    vt.push_back("are ");
    vt.push_back("you ");
    vt.push_back("?");

    copy(vt.begin(), vt.end(),
        std::ostream_iterator<string>(cout, " "));
    cout<<endl;
    cout<< "max_size() :" << vt.max_size() << endl;
    cout<< "size() :" << vt.size() << endl;
    cout<< "capacity() :" << vt.capacity() << endl;

    swap(vt[1], vt[3]);
    vt.insert(find(vt.begin(),vt.end(),"?"),
        "always");

    vt.back() = "!";

    copy(vt.begin(), vt.end(),
        std::ostream_iterator<string>(cout, " "));
    cout<<endl;
    cout<< "max_size() :" << vt.max_size() << endl;
    cout<< "size() :" << vt.size() << endl;
    cout<< "capacity() :" << vt.capacity() << endl;

}
  • 在g++中编译并运行。使用g++版本为:
    g++版本
  • 运行结果
    运行结果

注:博客内容均来自于对《C++标准库》侯捷,华中科技大学出版社一书的笔记。转载请注明出处。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空空的司马

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值