【STL】-迭代器的用法】的更多相关文章

STL迭代器简介 标准模板库(The Standard Template Library, STL)定义了五种迭代器.下面的图表画出了这几种: input         output \            / forward     |    bidirectional     |        random access 要注意,上面这图表并不是表明它们之间的继承关系:而只是描述了迭代器的种类和接口.处于图表下层的迭代器都是相对于处于图表上层迭代器的扩张集.例如:forward迭代器不但…
原文地址: https://www.cnblogs.com/fnlingnzb-learner/p/5833051.html C++中的STL中map用法详解   Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道.这里说下map内部数据的组织,map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),这颗树具有对数据自动…
目录 简介 用法 1. 头文件 2. vector的声明及初始化 3. vector基本操作 简介 vector,是同一类型的对象的集合,这一集合可看作可变大小的数组,是顺序容器的一种.相比于数组,应该多用vector,因为它的效率更高,而且具备很好的异常安全性. 对于容器来说,其重要特性之一便是于可以在运行时高效地添加元素. 类似于数组,vector采用连续内存地址来存储元素,因此vector属于顺序容器.也就意味着可以采用下标对vector的元素进行访问,和数组一样高效:同时它比数组更加灵活…
一步一步的理解C++STL迭代器 "指针"对全部C/C++的程序猿来说,一点都不陌生. 在接触到C语言中的malloc函数和C++中的new函数后.我们也知道这两个函数返回的都是一个指针.该指针指向我们所申请的一个"堆".提到"堆".就不得不想到"栈".从C/C++程序设计的角度思考,"堆"和"栈"最大的差别是"栈"由系统自己主动分配而且自己主动回收,而"堆…
STL迭代器很多时候可以当成指针来使用. 但是指针一般可以用const来控制访问. 那迭代器呢. #include <iostream> #include <vector> using namespace std; int main() { vector<int> vecs; vecs.push_back(); vecs.push_back(); vecs.push_back(); //1. 表示改迭代器为const,不能修改.但是指向的值可以改变. 相当于int *…
2017-08-20 17:26:07 writer:pprp 1.adjacent_find() 下面是源码实现: template <class ForwardIterator> ForwardIterator adjacent_find (ForwardIterator first, ForwardIterator last) { if (first != last) { ForwardIterator next=first; ++next; while (next != last) {…
迭代器的用法: 首先说两个概念,一个是可迭代的对象,一个是迭代器对象,两个不同 可迭代的(Iterable):就是可以for循环取数据的,比如字典.列表.元组.字符串等,不可使用next()方法. 迭代器(Iterator),也是可以依次迭代取出数据的对象,在内存空间是这样存储的:<list_iterator object at 0x01E35770>占用内存小,并且可以使用next()方法依次取数据 可以使用isinstance()方法来判断一个对象是可迭代对象还是迭代器对象 比如: >…
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhello * 完成日期:2016年6月7日 * 版本号:V1.0 * 问题描述:STL迭代器的使用 * 程序输入:无 * 程序输出:见运行结果 */ //STL迭代器的使用 #include<iostream> #include<list> //包含双向链表容器头文件 #include&…
string strTemp; list<string> strList; char *ch = new char[]; strcpy( ch , ""); strTemp = ch; strList.push_back( strTemp ); char *p = "abcdefg"; strTemp = p; strTemp += strTemp; char *lp = "e:\Project\InfoStation\INFOSTATION0…
大家好,我是小贺. 点赞再看,养成习惯 文章每周持续更新,可以微信搜索「herongwei」第一时间阅读和催更,本文 GitHub : https://github.com/rongweihe/MoreThanCPlusPlus 已经收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎 star 和完善.一起加油,变得更好! 前言 上一篇,我们剖析了 STL 空间配置器,这一篇文章,我们来学习下 STL 迭代器以及背后的 traits 编程技法. 在 STL 编程中,容器和算法是独立设计的…
初始化: list<char>::iterator pos; 算法: 1. 遍历 for(pos = col1.begin(); pos != col1.end(); ++pos){...} 代码: #include <iostream> #include <vector> #include <deque> #include <set> #include <algorithm> #include <iterator> //…
具体实现肯定不如书上讲的清楚了,这里只是根据侯捷书上的讲解,自己建立一条思路以及形成一些相关的概念 迭代器也可被称作智能指针,用于遍历容器内的元素,stl每个容器都实现了自己的iterator,iterator可以是一个类对象,也可以是原生指针 因此对迭代器进行解应用操作的时候需要重载* ->运算符,使之能正确返回元素对象,这两个重载是迭代器的核心 另外stl实现了算法和容器的泛型,如何能使算法顺利的对容器进行操作,这又是stl的泛型化必须要解决的问题 这时迭代器又扮演了中介的角色,只需把容器的…
迭代器是一种抽象的设计概念,现实程序语言中并没有直接对应于这个概念的实物. 1 迭代器设计思维——STL关键所在 不论是泛型思维或STL的实际运用,迭代器都扮演这重要的角色.STL的中心思想在于:将数据容器和算法分开,彼此独立设计,最后再以一贴胶着剂将它们撮合在一起.容器和算法的泛型化,从技术的角度来看是并不困难,C++的class template和function templates可分别达成目标. 以下是容器.算法.迭代器的合作展示,以算法find()为例,它接受两个迭代器和一个”搜索目标…
Map是 STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于 这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道.这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上 的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处. 下面举例说明 什么是一对一的数据映射.比如一个班级中,每个学生的学号跟他的姓名就存…
背景 今天考试深受平衡树之害,可以参见上一篇博客,想到了set却苦于实用的不熟练.同时QTY询问set的具体用法,所以写这篇博客,同时留作自用. 分类 参看了一下网上其他set博客,上来都是长篇大论概念.其实set很好理解,就是把一棵平衡树(红黑树)封装起来.这就是STL的牛×之处. set分为set和multiset 后者中的元素可以重复而前者不同 set的插入查询操作效率很高,复杂度为O(logn),所以大多数情况下可以放心使用 使用方法 插入操作 set<int> s; s.insert…
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道.这里说下map内部数据的组织,map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处. 1.map简介 map是一类关联式容器.它的特点是增加和删除节点对迭代器的影响很小,…
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道.这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处. 下面举例说明什么是一对一的数据映射.比如一个班级中,每个学生的学号跟他的姓名就存在着一一…
隶书文字为原创. 1.vector 在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结. 1 基本操作 (1)头文件#include<vector>. (2)创建vector对象,vector<int> vec; (3)尾部插入数字:vec.push_back(a); (4)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的. (5)使用迭代器访问元素. vector<int>::iterator i…
一个集合(set)是一个容器,它其中所包含的元素的值是唯一的. 用到的库 #include <set> 定义 最简单: set<int> a; set和其他的stl一样,都支持自定义. 因为set会自动将元素从小到大排序,所以我们可以设定它的比较函数,这里与优先队列十分相似. 法1 利用自定义比较函数: #include<stdio.h> #include<set> #include<string> using namespace std; st…
C++ STL unordered_map用法 在C++11中,unordered_map作为一种关联容器,替代了hash_map,unordered_map的底层实现是hash表,所以被称为无序关联容器. 不管是map还是unordered_map都是一种 key-map(value) 映射的容器,提供非常高的查找效率,下面我们来了解unordered_map的用法. 预备知识 在讲解unordered_map之前,我们先得了解一些预备知识: 元素类型 除常用的语言内置类型以外,unorder…
<算法笔记>学习笔记 map 常见用法详解 map翻译为映射,也是常用的STL容器 map可以将任何基本类型(包括STL容器)映射到任何基本类型(包括STL容器) 1. map 的定义 //单独定义一个map map<typename1, typename2> mp; //map和其他的STL容器在定义上有点不同 //因为 map 需要确定映射前类型(键key)和映射后类型(值value) //其中第一个是键的类型,第二个是值的类型 //字符串到整型的映射 //必须使用string…
<算法笔记>学习笔记 set 常见用法详解 set是一个内部自动有序且不含重复元素的容器 1. set 的定义 //单独定义一个set set<typename> name: //这里的typename可以是任何基本类型 set<int> name; set<double> name; set<char> name; set<node> name; //node是结构体的类型 //如果typename是一个STL容器,那么定义时要记得…
<算法笔记>中摘取 vector常见用法详解 1. vector的定义 vector<typename> name; //typename可以是任何基本类型,例如int, double, char, 结构体, STL标准容器 vector<int> name; vector<double> name; vector<char> name; vector<node> name; //node是结构体 //如果typename也是一个ST…
以前没怎么用过set,然后挂训练赛的时候发现set的妙用,结合网上用法一边学一边写. 首先set是一种容器,可以跟其他STL容器一样用 set<int > s 来定义, 它包含在STL头文件#include<set>中. 其内部是用红黑树来实现的, 一个是保证set里面是有序的, 默认的排序是从小到大排序, 而且set容器的元素都是唯一的, 如果里面的元素允许重复那就用 multiset 容器来实现. 1. set的常用操作 s.begin() 返回set容器的第一个元素的位置(第…
目录 STL及一些常用函数的基本用法 1.vector(向量)的基本用法 2.queue(队列)的基本用法 3.stack(栈)的基本操作 4.set(集合)的基本用法 5.map(映射)的基本用法 6.unorded_map的用法 7.list(列表)的基本用法 7.next_premutation(全排列)的用法 8.stringstream的用法 9.unique的用法 10.lower_bound的用法 11.string中的substr的用法 STL及一些常用函数的基本用法 1.vec…
STL的迭代器听起来怪吓人的,其实并不是什么高深的东西,说白了就是定义了一个指向STL的指针.. 对于没个STIL都可以定义 set,,vector ,,map,,,string 定义: set<int >::iterator it;(以set与int为例) 可以用于遍历set中的元素  比如 for(it=s.begin();it!=s.end();it++){ cout<<*it<<endl; } 这样就可以输出集合中的元素了 对于map for(it=s.begi…
学完c++快一年了,感觉很有遗憾,因为一直没有感觉到c++的强大之处,当时最大的感觉就是这个东西的输入输出比C语言要简单好写. 后来我发现了qt,opencv,opengl,原来,c++好玩的狠. 在这些图形库之外,最常用的可能就是STL,这个东西由于当时学c++的时候迷迷糊糊,完全是一头雾水,上学期数据结构之后开始有点儿开窍了,现在把才c++STL中常用的函数,用法贴一下,也是记录一下,希望能给一样迷糊的盆友们一些帮助. #include <iostream> #include <ve…
介绍 vector是表示可变大小数组的序列容器. 就像数组一样,vector也采用的连续存储空间来存储元素.也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效.但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理. 本质讲,vector使用动态分配数组来存储它的元素.当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间.其做法是,分配一个新的数组,然后将全部元素移到这个数组.就时间而言,这是一个相对代价高的任务,因为每当一个新的元素加入到容器的时候,v…
在stl的算法中运用容器的迭代器时,很可能经常会用到迭代器相应型别(例如迭代器所指物的型别),假设算法中有必要声明一个变量,以"迭代器所指对象的型别"为类型,如何是好,例如我们写一个功能,打印迭代器元素的值: template <class T> struct MyIter { typedef T value_type; T* ptr; MyIter(T* p = NULL):ptr(p){} T& operator*()const {return *ptr;} }…
之前看<C++ Primier>的时候,也解到在顺序型窗口里insert/erase会涉及到迭代器失效的问题,并没有深究.今天写程序的时候遇到了这个问题. 1 莫名其妙的Erase 最初我的程序是酱紫的,别说话,我知道这样是有问题的,可这样是最直观的想法 int arr[]={0,1,2,3,4,5,6,7,8,9,10}; vector<int> a(arr,arr+sizeof(arr)/sizeof(*arr));for (auto it = a.begin(); it !=…