C++STL学习(1)容器vector
2015-10-13 15:23
344 查看
注:博客内容均来自于对《C++标准库》侯捷,华中科技大学出版社一书的笔记。转载请注明出处。所有例程在Red Hat Linux 3.2.2-5版本上编译运行g++的版本是 g++ (GCC) 3.2.2 20030222
vector可以理解成一个动态数组,vector的结构可以用下图来理解。
![](https://img-blog.csdn.net/20160725164728608)
vector的特性:
vector支持随机存储。可以在常数时间内存取任何一个元素。
基于vector的结构,vector在末尾添加元素和删除元素时间复杂度都可以O(1)内完成,在vector的中间或者开头插入或者删除元素因为会导致后面元素的移动所以时间复杂度为O(n)。
!vector容量很重要:
一旦内存重新配置,和vector元素相关的所有references(引用),pointers(指针),iterators(迭代器)都会失效;
内存重新配置很耗时间,所以如果知道容器要装多少的元素的时候,可以提前分配好。
![](https://img-blog.csdn.net/20151013150041419)
对于在创建对象之前就能预知vector长度的情况下,最好指明需要分配的内存大小,这样可以减少在插入元素过程中的分配内存操作(分配内存的操作比较耗时间)。
![](https://img-blog.csdn.net/20151013150210127)
![](https://img-blog.csdn.net/20151013150305119)
![](https://img-blog.csdn.net/20151013150401842)
![](https://img-blog.csdn.net/20151013150457965)
![](https://img-blog.csdn.net/20151013150558134)
在g++中编译并运行。使用g++版本为:
![](https://img-blog.csdn.net/20151013152148304)
运行结果
![](https://img-blog.csdn.net/20151013152208839)
注:博客内容均来自于对《C++标准库》侯捷,华中科技大学出版社一书的笔记。转载请注明出处。
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++版本为:
运行结果
注:博客内容均来自于对《C++标准库》侯捷,华中科技大学出版社一书的笔记。转载请注明出处。
相关文章推荐
- NYOJ4 之ASCII码排序和c++快速排序
- C++指针(一)
- 值得推荐的C/C++框架和库
- c语言指针
- c语言 c到c++的注释转换
- 递归函数的使用-以C++语言为例(下)
- [C++] Realloc Memory
- c++ template 多层继承下找不到纯虚拟函数实现 报错:undefined reference to "xxx"
- C语言实现的Python扩展模块
- c++操作EXCEL
- C++ BOOST库 条件变量[多线程通信]机制 简单介绍
- HDU 1312 Red and Black(dfs)
- C++中Format的用法
- 爬爬爬之路:C语言(四) 一维数组篇
- The differences between new(delete) and malloc(free) in c/c++
- C++第六课 函数1
- c语言实现模拟发送报文改进版(添加程序自动打log)
- Leecode_Count Primes
- C++ 用户自定义类型
- Leetcode NO.8 String to Integer (atoi)