赞
踩
目录
capacity[kə'pæsəti]:返回分配的存储容量大小
begin: -->end: -->rbegin: -->rend:
max_size: -->size: -->rsize: -->capacity: -->reserve: -->empty:
operator[]: -->at: -->front: -->back:
assign: -->push_back: -->pop_back: -->insert: -->erase: -->swap: -->clear:
template <class T,class Alloc = allocator <T >> class vector; //通用模板
序列
序列容器中的元素按严格的线性顺序排序。各个元素按其顺序访问它们的位置。
动态数组
允许直接访问序列中的任何元素,甚至通过指针算术,并在序列的末尾提供相对快速的元素添加/删除。
分配感知器
容器使用allocator对象来动态处理其存储需求。
向量(vector)
向量是表示可以改变大小的数组的序列容器。
就像数组一样,向量使用连续的存储位置作为元素,这意味着它们的元素也可以使用常量指向其元素的偏移来访问,并且与数组一样有效。但与数组不同,它们的大小可以动态变化,其存储由容器自动处理。
在内部,向量使用动态分配的数组来存储它们的元素。可能需要重新分配此数组,以便在插入新元素时增大大小,这意味着分配新数组并将所有元素移动到该数组。就处理时间而言,这是相对昂贵的任务,因此,每次将元素添加到容器时,向量不会重新分配。
相反,向量容器可以分配一些额外的存储以适应可能的增长,因此容器可以具有大于包含其元素(即,其大小)严格需要的存储的实际容量。库可以实现不同的增长策略以在内存使用和重新分配之间取得平衡,但无论如何,重新分配只应以对数增长的大小间隔发生,以便在向量末尾插入单个元素可以提供摊销的常量时间复杂性(见push_back)。
因此,与数组相比,向量消耗更多内存以换取管理存储和以有效方式动态增长的能力。
与其他动态序列容器(dequse,lists和forward_lists)相比,向量非常有效地访问其元素(就像数组一样)并且相对有效地从其末尾添加或删除元素。对于涉及在末尾以外的位置插入或删除元素的操作,它们的性能比其他位置差,并且与列表和forward_lists相比具有更少的一致的迭代器和引用。
member function:
注:迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。
begin:将迭代器返回到开头。
end:将迭代器返回到结束。
rbegin:返回反向迭代器以反向开始。
rend:将反向迭代器返回到反向结束。
max_size:迭返回代器可以作为内容保存的最大元素数。
size:返回向量中的元素数。
resize:改变容器大小
capacity[kə'pæsəti]:返回分配的存储容量大小
reserve:请求更改容量
empty:检测向量是否为空
operator[]:访问元素
at:访问元素
front:访问第一个元素
back:访问最后一个元素
assign:分配向量内容
push_back:在最后添加元素
pop_back:删除最后元素
insert:插入元素
erase[ɪ'reɪz]:擦除元素
swap:交换元素
clear:清空元素
将迭代器返回到开头。返回指向向量中第一个元素的迭代器。
iterator begin();
请注意,与成员vector :: front不同,它返回对第一个元素的引用,此函数返回指向它的随机访问迭代器。
- /*======================================
- 函数操作:begin()
- 函数参数:无
- 函数返回:指向vector 中第一个元素iterator
- ======================================*/
- #include <iostream>
- #include <vector>
- using namespace std;
-
- int main()
- {
- vector<int> myvector;
- for(int i = 1; i <= 5; i++)
- myvector.push_back(i);
- vector<int>::iterator it; //it是迭代器指针类型,对vector 迭代器指针进行++,相当于对数组指针进行++操作。
- std::cout << "myvector contains:";
- for(it = myvector.begin(); it != myvector.end(); it++)
- cout<<*it<<" ";
- cout<<endl;
- return 0;
- }
- /*=======================================
- 函数输出:myvector contains:1 2 3 4 5
- =======================================*/
将迭代器返回到结束.返回一个迭代器,引用向量容器中的past-the-end元素(一个不存在的元素)。
iterator end();
后端元素是向量中最后一个元素后面的理论元素(此处可以理解为:向量中最后一个数据的下一个数据地址,如果这个位置曾经存储过数据,则*object.end()返回该数据的值)。它不指向任何元素,因此不应取消引用。因为标准库的函数使用的范围不包括其闭合迭代器指向的元素,所以此函数通常与vector :: begin结合使用以指定包含容器中所有元素的范围。 如果容器为空,则此函数返回与vector :: begin相同的值。
- /*======================================
- 函数操作:end()
- 函数形参:无
- 函数返回:指向vector 中最后一个元素的下一个
- 元素的iterator
- 注意:[myvector.begin(), myvector.end())
- 表示左闭右开区间
- ======================================*/
- #include <iostream>
- #include <vector>
-
- int main()
- {
- std::vector<int> myvector;
- for(int i = 1; i <= 5; i++)
- myvector.push_back(i);
- std::cout << "myvector contains:";
- for(std::vector<int>::iterator it = myvector.begin(); it != myvector.end(); it++)
- std::cout << *it << " ";
- std::cout << std::endl;
- return 0;
- }
- /*=======================================
- 函数输出:myvector contains:1 2 3 4 5
- =======================================*/
注:迭代器不能等于 end();比如 it = myvector.end(); 运行结果如下图,end()是一个错误的指针
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。