STL提供三种组件:容器,迭代器,算法,它们都支持泛型程序设计标准容器有两类:顺序容器和关联容器。

顺序容器(vector,list,deque,string等)是一系列元素的有序组合。

关联容器(set,multiset,map,multimap等)包含查找元素的键值。

迭代器的作用是遍历容器。

库包含四类算法:排序算法,不可变序算法,变序性算法和数值算法。

接下来介绍vector的简单用法

 //题意描述:用vector向量容器装入10个整数,然后使用迭代器//iterator和accumulate算法统计这10个元素的和

 #include<iostream>//cin和cout需要
#include<vector> //向量需要
#include<numeric> //accumulate算法需要
using namespace std; int main(int argc,char *argv[])
{
vector<int>v;//定义向量i
int i;
12 for(i=;i<;i++)
{
v.push_back(i);//尾部元素扩张方式赋值
}
//使用iterator迭代器顺序遍历所有元素
for(vector<int>::iterator it=v.begin();it!=v.end();it++)
{
cout<<*it<<" ";//输出迭代器当前位置上的元素值
}
cout<<endl;
22 cout<<accumulate(v.begin(),v.end(),)<<endl;//统计输出向量所有元素的和
return ;
}
//运行结果:

vector向量容器不但能像数组一样对元素进行随机访问,还能在尾部插入元素,是一种简单,高效的容器,完全可以代替数组。

值得注意的是,vector具有内存自动管理的功能,对于元素的插入和删除,可动态调整所占的内存空间。

创建vector对象常用的有三种形式:

(1) //不指定容器的元素个数,如定义一个用来存储整型的容器vector<int>v;

(2//定义容器的大小,如定义一个用来存储10个double类型元素的向量容器)

vector<double>v();

(3)//创建一个具有n个元素的向量容器对象,每个元素都具有指定的初始值

vector<double>v(,8.6);

上述语句的意思是,定义了v向量容器,共有10个元素,每个元素的初始值都是8.6

 

 尾部元素扩张

通常使用push_back()对vector容器在尾部追加新的元素。尾部追加的元素,vector容器会自动分配新内存空间。可以对空的vector对象扩张,也可以对已有元素的vector对象扩张

 //问题描述:将2,7,9三个元素从尾部添加到v容器中。
#include<iostream>
#include<vector>
using namespace std; int main(int argc,char *argv[])
{
vector<int>v;
v.push_back();
10 v.push_back();
v.push_back(); for(vector<int>::iterator it=v.begin();it!=v.end();it++)
cout<<*it<<" ";
15 cout<<endl;
16 return ;
} //程序运行结果输出:2 7 9

vector元素的删除:

erase()方法可以删除vector中迭代器所指的一个元素或一段区间中的所有元素。

clear()方法则一次性删除vector中的所有元素。

 #include<iostream>
#include<vector>
using namespace std; int main(int argc,char *argv[])
{
vector<int>v();
vector<int>::iterator it; for(int i=;i<;i++)
11 v[i]=i; //下标方法 for(it=v.begin();it!=v.end();it++) //输出当前迭代器上的元素值
cout<<*it<<" ";
cout<<endl; 17 v.erase(v.begin()+); //删除第二个元素,从0开始计数 for(it=v.begin();it!=v.end();it++) //输出当前迭代器上的元素值
cout<<*it<<" ";
cout<<endl; //删除迭代器第1到第5区间的所有元素
v.erase(v.begin()+,v.begin()+);
for(it=v.begin();it!=v.end();it++) //输出当前迭代器上的元素值
cout<<*it<<" ";
cout<<endl; 29 v.clear(); //清空向量 cout<<v.size()<<endl; //输出向量的大小
return ;
} /*
运行结果:
0 1 2 3 4 5 6 7 8 9
0 1 3 4 5 6 7 8 9
0 6 7 8 9 */

C++ -- STL泛型编程(一)之vector的更多相关文章

  1. UVa 11991:Easy Problem from Rujia Liu?(STL练习,map+vector)

    Easy Problem from Rujia Liu? Though Rujia Liu usually sets hard problems for contests (for example, ...

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

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

  3. C++学习之STL(一)vector

    前言 C++ Primer Plus读书笔记(三)复合类型 中已经简单介绍过vector是什么,这个系列主要是介绍STL特性. 声明 vector<ElemType> c; //创建一个空 ...

  4. C++ STL泛型编程——在ACM中的运用

    学习过C++的朋友们应该对STL和泛型编程这两个名词不会陌生.两者之间的关系不言而喻,泛型编程的思想促使了STL的诞生,而STL则很好地体现了泛型编程这种思想.这次想简单说一下STL在ACM中的一些应 ...

  5. STL之序列容器vector

    首先来看看vector的模板声明: template <class T, class Alloc = allocator<T>> class vector { //… }; v ...

  6. DLL中传递STL参数(如Vector或者list等)会遇到的问题[转载]

    最近的一个项目中遇到了调用别人的sdk接口(dll库)而传给我的是一个vector指针,用完之后还要我来删除的情况.这个过程中首先就是在我的exe中将其vector指针转为相应指针再获取vector中 ...

  7. 《STL系列》之vector原理及实现

    最近忙得蛋疼,但还是想写点属于自己的东西.也不知道写点啥,最后决定试着自己实现STL中常用的几个集合,一来加深自己对STL的理解,二来看看自己是否有这个能力实现.实现目标就是:1能和STL兼容:2最大 ...

  8. STL学习二:Vector容器

    1.Vector容器简介 vector是将元素置于一个动态数组中加以管理的容器. vector可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲). vector尾部添 ...

  9. POJ 3096 Surprising Strings(STL map string set vector)

    题目:http://poj.org/problem?id=3096 题意:给定一个字符串S,从中找出所有有两个字符组成的子串,每当组成子串的字符之间隔着n字符时,如果没有相同的子串出现,则输出 &qu ...

随机推荐

  1. 我的Apache又挂了之apache错误:server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName'

    表示物理机装Apache然后有时候关机会忘了关闭Apache然后长此以往会导致各种Apache起不来的缘故,上一次已经出现过一次.今天又出现了 再次记录一下解决的方法. 1.查看错误日志 /var/l ...

  2. STL hashtable阅读记录

    unordered_map,unordered_set等相关内容总结: unordered_map和unordered_set是在开发过程中常见的stl数据结构.其本质是hashtable.在SGI_ ...

  3. 在64位ubuntu中安装代码比较工具beyond compare

    1,//从http://www.scootersoftware.com/download.php 官方地址下载 bcompare-3.3.2.14050.tar.gz 或 bcompare-4.0.7 ...

  4. C# 获取mp3文件的歌曲时间长度

    添加命名空间:    using Shell32;    using System.Text.RegularExpressions;添加引用:COM组件的Microsoft Shell Control ...

  5. loadrunner 测试问题汇总

    1.关于Error -27791: Error -27790:Error -27740:        错误如下:        Action.c(198): Error -27791: Server ...

  6. AspNet Core 发布到Linux系统和发布IIS 注意项

    AspNet Core 发布到Linux系统和发布IIS 注意项 1.发布时需要注意的 2.Windows Server 2012 api-ms-win-crt-runtime-l1-1-0.dll ...

  7. 4、GitLab 创建、删除、修改项目

    一.gitLab创建项目 1.创建用户组 2.填写组信息后单击“Create group” 其中:“Group path”将显示在git路径中 3.选择需要加入该组的“用户”和“角色”后点击“Add ...

  8. csu 1757(贪心或者树状数组)

    1757: 火车入站 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 209  Solved: 51[Submit][Status][Web Board] ...

  9. jmeter-----如何安装插件管理?

    1.下载插件管理jar文件,http://www.jmeter-plugins.org/wiki/PluginsManager/ 2. 拷贝这jar文件到 \lib\ext文件夹里 3. 重新打开JM ...

  10. MySQL的表管理

    首先,先选择数据库(极其特别重要,如果不选择,将默认为第一个数据库) mysql > use db_name; 查看所有表 mysql > show tables; 1.创建表 creat ...