C++ STL

array

  1. array 容器存储的所有元素一定会位于连续且相邻的内存中
  2. array 容器替换普通数组的好处是,array 模板类中已经封装好了大量实用的方法,在提高开发效率的同时,代码的运行效率也会大幅提高。
    1. at() 函数可以有效防止越界操纵数组的情况
    2. fill() 函数可以实现数组的快速初始化
    3. swap() 函数可以轻松实现两个相同数组(类型相同,大小相同)中元素的互换。
    4. 当两个 array 容器满足大小相同并且保存元素的类型相同时,两个 array 容器可以直接直接做赋值操作。也支持比较运算符,
  3. array 容器的大小必须保证能够容纳复制进来的数据。
  4. 如果是存储字符串的话,还要保证在存储整个字符串的同时,在其最后放置一个\0作为字符串的结束符。strcpy() 在拷贝字符串的同时,会自动在最后添加\0
  5. 容器的迭代器和指针是不能混用的

vector

  1. 和 array 容器非常类似,array 实现的是静态数组(容量固定的数组),而 vector 实现的是一个动态数组。

  2. 尾部插入或删除元素,时间复杂度为O(1)。头部或者中部插入或删除元素,时间复杂度为线性阶O(n)

  3. vector 底层只是一段连续的线性内存空间

    1. 使用 3 个迭代器(可以理解成指针)来表示的:
    2. _Myfirst 指向的是 vector 容器对象的起始字节位置;
    3. _Mylast 指向当前最后一个元素的末尾字节;
    4. _myend 指向整个 vector 容器所占用内存空间的末尾字节。
  4. vector扩大容量的本质:

    1. 完全弃用现有的内存空间,重新申请更大的内存空间;
    2. 将旧内存空间中的数据,按原有顺序移动到新的内存空间中;
    3. 最后将旧的内存空间释放。
1、创建:
std::vector<double> values;  空vector
	values.reserve(20);  
        // 如果size大于或等于 20 个元素,则跳过
        // 迭代器可能会失效,增加容器的容量,容器的元素可能已经被复制或移到了新的内存地址。
std::vector<int> primes {2, 3, 5, 7, 11, 13, 17, 19};  //初始化
std::vector<double> values(20);		// 设置大小
std::vector<double> values(20, 1.0);  // 设置大小和默认值

std::vector<char>value1(5, 'c');
std::vector<char>value2(value1);  // 用vector初始化

int array[] = {1,2,3};
std::vector<int>values(array, array+2);  //values 将保存{1,2}
std::vector<int>value1{1,2,3,4,5};    //value2保存{1,2,3}
std::vector<int>value2(std::begin(value1),std::begin(value1)+3);

2、成员函数
迭代器:begin()	、end()	
大小: size()元素个数、capacity()当前容量、max_size()最大容量、resize()
empty()	、operator[ ]下标访问修改元素、at()带边界检查、front()、back()
push_back()	、pop_back()	、insert()指定未知插入一个或多个元素、
erase()删除一段、clear()清空、swap()交换两个容量元素、
data()第一个元素指针、

C++11补充begin()、end()函数用于操作普通数组,不影响vector内的begin、end。
	begin()返回第一个元素指针
	end()最后一个元素后一个指针。
	
reserve和resize
reserve(size_type size); // 预留至少能容纳size个元素的空间
resize(size_type size,TYPE val);  //改变大小为size,且对新创建的元素赋值val
	resize会删除不够放的数据,reserve不会

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值