C++ -- STL泛型编程(一)之vector
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的更多相关文章
- 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, ...
- 标准模板库(STL)学习探究之vector容器
标准模板库(STL)学习探究之vector容器 C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被 ...
- C++学习之STL(一)vector
前言 C++ Primer Plus读书笔记(三)复合类型 中已经简单介绍过vector是什么,这个系列主要是介绍STL特性. 声明 vector<ElemType> c; //创建一个空 ...
- C++ STL泛型编程——在ACM中的运用
学习过C++的朋友们应该对STL和泛型编程这两个名词不会陌生.两者之间的关系不言而喻,泛型编程的思想促使了STL的诞生,而STL则很好地体现了泛型编程这种思想.这次想简单说一下STL在ACM中的一些应 ...
- STL之序列容器vector
首先来看看vector的模板声明: template <class T, class Alloc = allocator<T>> class vector { //… }; v ...
- DLL中传递STL参数(如Vector或者list等)会遇到的问题[转载]
最近的一个项目中遇到了调用别人的sdk接口(dll库)而传给我的是一个vector指针,用完之后还要我来删除的情况.这个过程中首先就是在我的exe中将其vector指针转为相应指针再获取vector中 ...
- 《STL系列》之vector原理及实现
最近忙得蛋疼,但还是想写点属于自己的东西.也不知道写点啥,最后决定试着自己实现STL中常用的几个集合,一来加深自己对STL的理解,二来看看自己是否有这个能力实现.实现目标就是:1能和STL兼容:2最大 ...
- STL学习二:Vector容器
1.Vector容器简介 vector是将元素置于一个动态数组中加以管理的容器. vector可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲). vector尾部添 ...
- POJ 3096 Surprising Strings(STL map string set vector)
题目:http://poj.org/problem?id=3096 题意:给定一个字符串S,从中找出所有有两个字符组成的子串,每当组成子串的字符之间隔着n字符时,如果没有相同的子串出现,则输出 &qu ...
随机推荐
- 大图片上传(ImageIO,注意有的图片不能上传时因为他是tiff格式)
一下是必要的: 1.enctype="multipart/form-data" 2. //不要使用myeclipse自动生成的get.set方法(struts2中的用法) publ ...
- ISG2018 web题Writeup
0x01.命令注入 这题可以使用burpsuite扫出来,但是可能需要测一下. 得知payload为:i%7cecho%20gzavvlsv9c%20q9szmriaiy%7c%7ca%20%23'% ...
- webgote的例子(5)Sql注入(Blog)
SQL Injection - Stored (Blog) (本章内容):留言板的注入 看到这个页面先看以下这个页面是做什么的.进行正常的写入发现我每写一句话,其内容都会写到下面的entry里面 在尝 ...
- 01布尔模型&倒排索引
原文链接: http://www.cnblogs.com/jacklu/p/8379726.html 博士一年级选了这门课 SEEM 5680 Text Mining Models and Appli ...
- 省市区ajax联动
function setCity1(){ var areaId1 = $('#areaId1').val(); var cityId1 = $('#cityId1'); var cityOpt = $ ...
- css绘制图标
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...
- HDU 1043 Eight(反向BFS+打表+康托展开)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1043 题目大意:传统八数码问题 解题思路:就是从“12345678x”这个终点状态开始反向BFS,将各 ...
- CSS&&xpath
1.元素选择器 <div class="wrap"> 直接选择文档元素div 2.类选择器 <div class="wrap"> 元素的 ...
- 20165301 2017-2018-2 《Java程序设计》第六周学习总结
20165301 2017-2018-2 <Java程序设计>第六周学习总结 教材学习内容总结 第七章:常用实类 String类 构造String对象 常量对象 String对象 Stri ...
- 新版Java为什么要修改substring的实现
Java字符串的截取操作可以通过substring来完成.有意思的是,这个方法从jdk1.0开始,一直到1.6都没有变化,但到了1.7实现方式却发生了改变.你可能会认为之所以要对一个成熟且稳定的方法做 ...