C++的STL从广义上讲分为algorithm(算法),container(容器)和iterator(迭代器)三类,包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。

  在C++标准库中,STL被组织成为下面的13个头文件:<algorithm>, <deque>, <functional>, <iterator>, <vector>, <list>, <map>, <memory>, <numeric>, <queue>, <set>, <stack>和 <utility>

1,vector向量容器

  vector是一种简单高效的容器,在尾端插入何删除元素,算法时间复杂度为O(1),其他元素插入和删除为O(n)。vector可动态调整所占用的内存空间。

用数组方式访问vector元素的参考代码如下图所示:

#include<iostream>
#include<cstdio>
#include<vector>
using namespace std; int main()
{
vector<int> v;
v.push_back(); //尾端插入新元素
v.push_back();
v.push_back(); for(int i = ; i < v.size(); i++)
cout<<v[i]<<' '; getchar(); return ;
}

运行结果

#include<iostream>
#include<cstdio>
#include<vector> using namespace std; int main()
{
int j; vector<int> v; v.push_back(); //尾端插入新元素
v.push_back();
//v.clear(); //全部清空元素
v.push_back();
v.insert(v.begin()+, ); //插入9在第二个后面
v.insert(v.begin(), ); //插入5为首元素
v.insert(v.end(), ); //插入12为末元素
v.erase(v.begin()+); //删除第二个元素
v.erase(v.begin(), v.begin()+); //删除前三个元素 vector<int>::iterator i; //迭代器相当于游标 for(i = v.begin(), j = ; i != v.end(); i++, j++)
cout<<"v["<<j<<"]="<<*i<<endl; swap(v[], v[]); for(i = v.begin(), j = ; i != v.end(); i++, j++)
cout<<"v["<<j<<"]="<<*i<<endl; cout<<v.empty()<<endl; //判断是否为空
cout<<v.size()<<endl; //元素实际个数
cout<<v.max_size()<<endl; //可容纳的最大元素个数
cout<<v.capacity()<<endl; //当前可容纳的vector元素个数
cout<<v.front()<<endl; //首元素引用
cout<<v.back()<<endl; //末尾元素引用
v.pop_back(); //删除末尾元素 v.reserve(); //调整数据空间大小
cout<<v.capacity()<<endl; vector<int>::reverse_iterator ri; //反响迭代器
for(ri = v.rbegin(); ri != v.rend(); ri++) //首尾反向
cout<<*ri<<" "; getchar(); return ;
}

运行结果

结构体容器参考代码如下

#include<iostream>
#include<cstdio>
#include<vector> using namespace std; struct stu
{
int x;
int y;
}; int main()
{
int j;
vector<stu> v1; //结构体容器
vector<stu> v2; struct stu a = {, };
struct stu b = {, };
struct stu c = {, }; v1.push_back(a);
v1.push_back(b);
v1.push_back(c);
v2.push_back(c);
v2.push_back(b);
v2.push_back(a); cout<<"v1:\n"; for( int i = ; i < v1.size(); i++)
cout<<v1[i].x<<" "<<v1[i].y<<endl; cout<<"v2:\n"; for(int i = ; i < v2.size(); i++)
cout<<v2[i].x<<" "<<v2[i].y<<endl; swap(v1, v2); cout<<"v1:\n"; for(int i = ; i <v1.size(); i++)
cout<<v1[i].x<<" "<<v1[i].y<<endl; cout<<"v2:\n"; for(int i = ; i < v2.size(); i++)
cout<<v2[i].x<<" "<<v2[i].y<<endl; getchar(); return ;
}

运行结果:

标准模板库使用参考——vector向量容器的更多相关文章

  1. C++标准模板库(STL)和容器

    1.什么是标准模板库(STL)? (1)C++标准模板库与C++标准库的关系 C++标准模板库其实属于C++标准库的一部分,C++标准模板库主要是定义了标准模板的定义与声明,而这些模板主要都是 类模板 ...

  2. C++标准模板库STL算法与自适应容器(栈和队列)

    参考<21天学通C++>第23与第24章节,对STL算法与自适应容器进行介绍. 实际上在前面的STL顺序容器.关联容器进行介绍时或多或少引用到了一些STL算法中的模板函数.而自适应容器是在 ...

  3. 7.4 C++标准模板库(STL)的概念

    参考:http://www.weixueyuan.net/view/6401.html 总结:  标准模板库为C++提供了完善的数据结构及算法. 标准模板库包括三部分:容器.算法和迭代器. 容器是对象 ...

  4. C++-标准模板库

    C++较之C语言强大的功能之一是,C++编译器自带了大量的可复用代码库,我们称为标准模板库(standard template library),STL.标准模板库是一套常用的数据结构的集合,包括链表 ...

  5. 标准模板库(STL)学习探究之vector容器

    标准模板库(STL)学习探究之vector容器  C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被 ...

  6. STL(标准模板库)理论基础,容器,迭代器,算法

    基本概念 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间.   ...

  7. C++标准模板库(STL)之Vector

    在C中,有很多东西需要自己实现.C++提供了标准模板库(Standard Template Libray,STL),其中封装了很多容器,不需要费力去实现它们的细节而直接调用函数来实现功能. 具体容器链 ...

  8. C++ 标准模板库(STL)——容器(Containers)的用法及理解

    C++ 标准模板库(STL)中定义了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量(vector).队列(queue).栈(stack).set.map等.这次主要 ...

  9. 8、泛型程序设计与c++标准模板库2、c++标准模板库中的容器

    顺序容器类以逻辑线性排列方式存储元素,在这些容器类型中的元素在逻辑上被认为是连续的存储空间中存储的.顺序容器可用于存储线性群体. 在关联容器类中,元素的存储和检索基于关键字和元素与其他元素之间的关系, ...

随机推荐

  1. .Net 框架实现AOP(动态代理实现AOP,本文为翻译)

    在上一节,我们将静态实现AOP,但是对于一个大型项目,要想为每个类,每个方法都去实现AOP ,进行日志记录和权限验证似乎是不可能的. 即使可能对于成百上千个类维护,也是很难维护.所以今天的主题就是如标 ...

  2. oracle的sqlldr时插入新列和固定数据

    ctl文件加入固定值 region CONSTANT '31', 加入默认时间 RECORD_DATE "sysdate" 最好数据也设置RECORD_DATE的默认值为sysda ...

  3. CDM中,创建一个或多个组合属性的唯一约束

    除主键外,有时还需要创建一个或多个组合字段的唯一约束,方法如下: 双击打开实体,在idntifier标签页中可看到默认主键的唯一约束,在其下方添加一条记录,然后双击该记录,打开约束设置窗口 在该窗口的 ...

  4. maven项目如何启动运行---发布到tomcat中

    前面两篇文章: 新建maven框架的web项目 以及 将原有项目改成maven框架 之后,我们已经有了maven的项目 那么 maven项目到底怎么启动呢 如果我们直接在myeclipse中按以前的启 ...

  5. ubuntu 12.04的源更新

    apt-get install vim 安装vim vim /etc/apt/sources.list deb http://mirrors.163.com/ubuntu/ precise main ...

  6. Mycat实战之日志分析

    环境搭建参见之前发的一篇:http://www.cnblogs.com/chinesern/p/7667106.html 1修改log4j.xml 配置增加其他级别调试以及验证是否自动加载 cat / ...

  7. wordpress 学习笔记

    (1) __()函数 function __( $text, $domain = 'default' ) { return translate( $text, $domain ); } 返回一个字符串 ...

  8. Listview使用安卓自带布局实现单选

    安卓提供了一些自带的布局,使用非常简单.直接看代码吧. package com.example.linfeng.myapplication; import android.app.Activity; ...

  9. idea写中文到mysql乱码

    idea中中文写入到mysql乱码 参考如下链接: https://segmentfault.com/q/1010000006174975/a-1020000006184639

  10. solrcloud使用问题记录

    Solr Ping query caused exception: undefined field text [java] view plaincopy <span style="fo ...