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 ...
随机推荐
- Python3 动态导入模块的两种方式
动态导入模块就是只知道str类型的模块名字符串,通过这个字符串导入模块 需要导入的模块: #!/usr/bin/env python # _*_ coding:utf-8 _*_ # Author:C ...
- 在shell中如何判断字符串是否为有效的IP地址【转】
转自 在shell中如何判断字符串是否为有效的IP地址_echoisecho_新浪博客http://blog.sina.com.cn/s/blog_53a844e50100xxus.html 近来需要 ...
- 华东师范大学第十届ECNU Coder程序设计竞赛
华东师范大学第十届ECNU Coder程序设计竞赛 浮点数模运算 solution 转成整数然后取模. 时间复杂度:\(O(1)\) 数螃蟹 solution 找出公差出现次数最多的作为公差,然后找出 ...
- Python中如何Debug
debug是编码是非常重要的调试技巧,通过在运行过程中设置断点,帮助开发人员更好的理解运行过程. Python中debug不像JAVA或者C++那样在IDE中设置断点那么直观. Python的debu ...
- 匿名函数、lambda表达式
匿名函数 func = lambda x: y #x是形参,y是返回值 键字lambda表示匿名函数,冒号前面的x表示函数参数,冒号后面的y表示匿名函数的返回值. 例1:返回列表中长度大于等于3的元素 ...
- C/C++——C语言库函数大全
本文转载自:https://blog.csdn.net/yanfan0916/article/details/6450442###; 1. 分类函数: ctype.h int isalpha(int ...
- Linux下不能挂载NTFS格式硬盘/U盘
如果大家以后在Ubuntu系统下面遇到NTFS格式的移动硬盘哪个分区不能挂载的话,可以尝试sudo ntfsfix /dev/你相应的分区
- 简易代理服务器之python实现
代理服务器是在client和server之间的一个服务器,一般起到缓存的作用,所以也叫缓存服务器.比如: A ----(HTTP)----> B ----(HTTP)----> C 其中A ...
- Python 3.6安装教程
0x01 安装Python 1.1 说明 目前,Python有两个版本,一个是2.x版,一个是3.x版,这两个版本是不兼容的. 本教程安装的是python-3.6.1-amd64版本. Python官 ...
- 关于ZIP自动打包的进一步进化思路
http://blog.163.com/long200259@126/blog/static/11288755920093120529157/