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. 大图片上传(ImageIO,注意有的图片不能上传时因为他是tiff格式)

    一下是必要的: 1.enctype="multipart/form-data" 2. //不要使用myeclipse自动生成的get.set方法(struts2中的用法) publ ...

  2. ISG2018 web题Writeup

    0x01.命令注入 这题可以使用burpsuite扫出来,但是可能需要测一下. 得知payload为:i%7cecho%20gzavvlsv9c%20q9szmriaiy%7c%7ca%20%23'% ...

  3. webgote的例子(5)Sql注入(Blog)

    SQL Injection - Stored (Blog) (本章内容):留言板的注入 看到这个页面先看以下这个页面是做什么的.进行正常的写入发现我每写一句话,其内容都会写到下面的entry里面 在尝 ...

  4. 01布尔模型&倒排索引

    原文链接: http://www.cnblogs.com/jacklu/p/8379726.html 博士一年级选了这门课 SEEM 5680 Text Mining Models and Appli ...

  5. 省市区ajax联动

    function setCity1(){ var areaId1 = $('#areaId1').val(); var cityId1 = $('#cityId1'); var cityOpt = $ ...

  6. css绘制图标

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  7. HDU 1043 Eight(反向BFS+打表+康托展开)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1043 题目大意:传统八数码问题 解题思路:就是从“12345678x”这个终点状态开始反向BFS,将各 ...

  8. CSS&&xpath

    1.元素选择器 <div class="wrap"> 直接选择文档元素div 2.类选择器 <div class="wrap"> 元素的 ...

  9. 20165301 2017-2018-2 《Java程序设计》第六周学习总结

    20165301 2017-2018-2 <Java程序设计>第六周学习总结 教材学习内容总结 第七章:常用实类 String类 构造String对象 常量对象 String对象 Stri ...

  10. 新版Java为什么要修改substring的实现

    Java字符串的截取操作可以通过substring来完成.有意思的是,这个方法从jdk1.0开始,一直到1.6都没有变化,但到了1.7实现方式却发生了改变.你可能会认为之所以要对一个成熟且稳定的方法做 ...