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

学习过C++的朋友们应该对STL和泛型编程这两个名词不会陌生。两者之间的关系不言而喻,泛型编程的思想促使了STL的诞生,而STL则很好地体现了泛型编程这种思想。这次想简单说一下STL在ACM中的一些应用。我们知道,在ACM竞赛中,经常需要用到数组、字符串、队列、堆栈、链表等数据结构和排序、搜索等算法,以提高程序的时间、空间运行效率。然而如果这些数据结构总是需要手工来编写,那无疑会是一件很麻烦的工作,而STL的出现很好地解决了这个问题。

我们简单来了解一下STL。STL提供了三种类型的组件:容器、迭代器和算法。容器主要有两类:顺序容器和关联容器。顺序容器(vector、list、deque和string等)是一系列元素的有序集合。关联容器(set、multiset、map和multimap)包括查找元素的键值。迭代器的作用是遍历容器。STL算法库包含四类算法:排序算法、不可变序算法、变序性算法和数值算法。下面就简单介绍一下STL里常用的容器。

1. vector向量容器

vector向量容器不但像数组一样对元素进行随机访问,还能在尾部插入元素,是一种简单、高效的容器,完全可以替代数组。由于vector具有内存自动管理的功能,对于元素的插入和删除,可动态调整所占的内存空间,因此使用时不需要考虑释放空间的问题。使用vector向量容器时,需要包含头文件“vector”。(即#include <vector>)对于vector容器的容量定义,可以事先定义一个固定大小,事后可以随时调整其大小;(例如vector<int> v(10); //定义一个用来存储10个int类型元素的向量容器)也可以事先不用定义其大小,使用push_back()方法从尾部扩张元素,也可以使用insert()在某个元素位置前插入新元素。

vector容器有两个重要的方法,begin()和end()。begin()返回的是首元素位置的迭代器;end()返回的是最后一个元素的下一个元素位置的迭代器。通常在遍历vector所有元素时会用到这两个方法。例如:

?

vector<int> v(3);

vector<int>::iterator it;

for(it=v.begin(); it!=v.end(); it++){...}

时间: 2024-10-07 10:37:59

C++ STL泛型编程——在ACM中的运用的相关文章

C++STL泛型编程基础知识讲解--------2015年2月3日

今天学习了C++STL泛型编程的基础知识,我对主要知识整理如下: STL提供三种类型的组件:容器,迭代器,算法.支持泛型程序设计标准.容器主要有两类:顺序容器和关联容器.顺序容器:vector,list,deque,string等都是一系列连续元素的集合.关联容器:set,multiset,map,multimap包含查找元素的键值.迭代器:遍历容器STL算法库:排序算法,不可变序算法,变序性算法,数值算法. /******************************************

ACM中常用算法----字符串

ACM中常用算法--字符串 ACM中常用的字符串算法不多,主要有以下几种: Hash 字典树 KMP AC自动机 manacher 后缀数组 EX_KMP SAM(后缀自动机) 回文串自动机 下面来分别介绍一下: 0. Hash 字符串的hash是最简单也最常用的算法,通过某种hash函数将不同的字符串分别对应到不同的数字.进而配合其他数据结构或STL可以做到判重,统计,查询等操作. #### 字符串的hash函数: 一个很简单的hash函数代码如下: ull xp[maxn],hash[max

IO/ACM中来自浮点数的陷阱(收集向)

OI/ACM中经常要用到小数来解决问题(概率.计算几何等),但是小数在计算机中的存储方式是浮点数而不是我们在作数学运算中的数,有精度的限制. 以下以GUN C++为准,其他语言(或编译器)也差不了多少.本文竞赛向. 一.基础篇 1.一般浮点数使用double,范围为大概为-10^308 ~ 10^308,有效精度为15~16位10进制数. 2.一般没事(比如内存问题)不用float,而使用double,一个double占8个字节. 3.信息学竞赛一般使用scanf和printf输入输出,而浮点数

ACM中杨辉三角的多种解法

杨辉三角的多种解法 杨辉三角的相信大家很熟悉吧,但是大家能用多少中方法写出来呀,一般人都只会想到两种,递归和二项式.当用递推时,有时在解题是根本没必要需要那么多呀,而只要杨辉三角的某一行,数据小时,我们可以用二项式来计算,但是数据比较大时,二项式算也是很麻烦的,那么还有其它的方法吗?所以下面我就介绍几种计算杨辉三角的方法吧. 主要要记住第四种.... 完整版下载:http://download.csdn.net/detail/u010304217/7750997 博客版下载:http://dow

【技巧】freopen()函数在ACM中的应用

在做题目的过程当中,我们需要在本机上调试,当然我们可以把测试用例一遍一遍粘贴复制,也经常会遇到测试用例很多的时候,输入和输出混了,还要去找输出和题目当中的对照.另外,有的时候题目给的测试用例太少,需要自己或者队友给想几个临界条件,自己动手多添加几个测试用例,每测一遍都要动手输入的话麻烦又浪费时间.这时候freopen()上场了. 函数名:    freopen() 函数声明:  FILE  *freopen(const char *path,const char *mode,FILE *stre

从ACM中删除一个已经创建的Library

从ACM中删除一个已经创建的Library,无法通过界面操作,需要手工从DB中删除.需要删除的表记录有: RECENTUPDATE 找到字段Name等于该libraryName的那条记录删除掉 delete from RECENTUPDATE where NAME='techair'; CONTAINERTEAM 对应一条记录 delete from CONTAINERTEAM where NAME like '%techair%'; WTLIBRARY 对应一条记录 delete from W

ACM中java的使用 (转)

ACM中java的使用 这里指的java速成,只限于java语法,包括输入输出,运算处理,字符串和高精度的处理,进制之间的转换等,能解决OJ上的一些高精度题目. 1. 输入: 格式为:Scanner cin = new Scanner (new BufferedInputStream(System.in)); 例程: import java.io.*; import java.math.*; import java.util.*; import java.text.*; public class

【转】ACM中java的使用

原文博客:http://www.cnblogs.com/XBWer/archive/2012/06/24/2560532.html ACM中java的使用 这里指的java速成,只限于java语法,包括输入输出,运算处理,字符串和高精度的处理,进制之间的转换等,能解决OJ上的一些高精度题目. 1. 输入: 格式为:Scanner cin = new Scanner (new BufferedInputStream(System.in)); 例程: import java.io.*; import

ACM中的浮点数精度处理

在ACM中,精度问题非常常见.其中计算几何头疼的地方一般在于代码量大和精度问题,代码量问题只要平时注意积累模板一般就不成问题了.精度问题则不好说,有时候一个精度问题就可能成为一道题的瓶颈,让你debug半天都找不到错误出在哪. 1.浮点数为啥会有精度问题: 浮点数(以C/C++为准),一般用的较多的是float, double. 占字节数 数值范围 十进制精度位数 float 4 -3.4e-38-3.4e38 6~7 double 8 -1.7e-308-1.7e308 14~15 如果内存不