`
deepfuture
  • 浏览: 4397792 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:80027
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:69998
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:103284
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:285619
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:15001
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:67492
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:32099
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:45965
社区版块
存档分类
最新评论

C++学习笔记-抽象容器类型

阅读更多
一、
1、删除操作
(1)erase()
slist.erase(iter);
slist.erase(first,last);//first和last都是iterator标记
(2)pop_back()
2、赋值和对换
(1)slist1=slist2;//slist1有2个元素,slist2有6个元素,则赋值后slist1有6个元素,slist2有6个元素。
(2)slist.swap(slist2);//slist1有2个元素,slist2有6个元素,则赋值后slist1有6个元素,slist2有2个元素。
3、find算法.返回位置
(1)lister=find(dlist.begin(),dlist.end(),some_double_value);
(2)string sname;
sring::size_type pos=sname.find("abc");
(3)sring::size_typepos=sname.find_first_of(sname2);//在sname中查找与sname2中任意一字符匹配的第一次出现
(4)sring::size_typepos=sname.find_first_of(sname2,5);//在sname的第五个位置开始查找与sname2中任意一字符匹配的第一次出现
(5)sring::size_typepos=sname.find_last_of(sname2);//在sname中查找与sname2中任意一字符匹配的最后一次出现
(6)sring::size_typepos=sname.find_last_of(sname2,5);//在sname的第五个位置开始查找与sname2中任意一字符匹配的最后一次出现
(7)sring::size_typepos=sname.find_first_not_of(sname2);//在sname中查找与sname2中任意一字符不匹配的第一次出现
(8)sring::size_typepos=sname.find_first_not_of(sname2,5);//在sname的第五个位置开始查找与sname2中任意一字符不匹配的第一次出现
(9)sring::size_typepos=sname.find_last_not_of(sname2);//在sname中查找与sname2中任意一字符不匹配的最后一次出现
(10)sring::size_typepos=sname.find_last_not_of(sname2,5);//在sname的第五个位置开始查找与sname2中任意一字符不匹配的最后一次出现
4、比较compare(),返回数字,0表示比较成功,负表示小于,正表示大于
(1)sname.compare(pos,3,sname2);//比较sname从第pos位开始的3位字符与sname2是否匹配
5、replace()替换,有十种不同的参数方式
6、assign()拷贝,append()连接,有多种不同的参数方式
sname.assign(sname2,0,4);//0-4个字符拷贝
二、
1、一个需要动态增长的vector必须分配一定内存以便于保存新的序列、按顺序拷贝旧序列的歹毒以及释放旧的内存。如果它的元素是类对象,那么拷贝和释放内存可能需要对每个元素依次调用拷贝构造函数和析构函数。
2、容量(capacity)是指在容器下一次需要增长自己之前能够加入到容器中的元素的总数。长度是指容器当前拥有元素的个数(size)。
3、vector自我增长越频繁,元素插入的开销越大。当开销大时,转换为list或通过指针间接存储复杂的类对象。
4、容器声明
vector<string> svec;
vector<int>ivec(200);创建长度为200的容器
list<int> ilist;
5、插入方法
(1)最简单为push_back()放在队列尾部,push_front()放在队列首部。
(2)svec.insert(要插入的位置,要插入的值),如
svec.insert(slist.begin(),spouse);
svec.insert(iter,spouse);
svec.insert(iter,10,spouse);//插入相同的10个spouse变量值
svec.insert(iter,sarry+2,sarry+4);//插入字符串数组sarry中的第2个到第4个范围内的元素
svec.insert(iter,svec2.begin(),svec2.end());
6、resize()重新设置容器长度。
7、容器支持关系操作符,如<,>等等可以比较两个同类型的容器。
8、迭代器提供一种通用的方法对容器内元素进行访问。
(1)begin()返回第一个元素,end()返回最后一个元素。++iter向前移动,*iter指向元素的值。
(2)const_iterator主要用于访问const容器。
(3)将迭代器移至指定位置如:vector<int>::iteratoriter=vec.begin()+vec.size()/2;iter+=2;但是这些算术运算只适用于vector或deque,因为它们的空间是连续的。
三、
1、由单一类型元素组成的一个有序集合。
2、主要的顺序容器是LIST和VECTOR。
3、关联容器支持查询一个元素是否存在,并可以有效获取元素,两个基本的关联容器类型是MAP映射和SET集合,MAP是一个键/值对,SET是一个单一健值,multimap多映射和multiset多集合支持同一个键的多次出现。
3、vector与list和deque
(1)vectorg表示一段连续内存区域,每个元素被顺序存储在这段内存中,这样删除中间任一个,会导致后面所有元素前移复制。
(2)list表示非连续的内存区域,并通过一对指向首尾元素的指针双向链接,对随机支持不好
(3)deque表示一段连续内存区域,支持高效在首部插入和删除元素,通过两级数组实现,一级表示实际的容器,第二级指向容器的首和尾
4、顺序容器类型的准则:
(1)如果我们需要随机访问一个容器,则vector比list好
(2)如果已知存储元素的个数,vector比list好
(3)如果会在中间插入或删除元素,list好
(4)需要高效在首部插入,deque好
分享到:
评论

相关推荐

    C++学习笔记经典(与C比较)

    《C++学习笔记经典(与C比较)》这份资料应该会详细讲解这些知识点,并通过实例来帮助读者深入理解C++与C的差异,以及如何在实际编程中应用C++的特性和功能。这份资料可能会涵盖基本语法、类和对象、模板、STL的使用...

    C & C++学习笔记集合

    这个“C & C++学习笔记集合”显然是一份综合性的资源,旨在帮助学习者深入理解和掌握这两种语言。 C 语言是基础,它的语法简洁明了,对内存管理有直接的控制,是理解计算机底层工作原理的良好起点。C 语言的核心...

    达内C-C++基础学习笔记

    C-C++基础学习笔记是编程初学者的重要参考资料,它们涵盖了C和C++语言的基本概念、语法和编程技巧。以下是对这些知识点的详细说明: 1. **C语言基础**:C语言是一门强大的低级编程语言,它以简洁、高效著称。学习...

    MFC学习笔记--案例--销售系统

    **MFC学习笔记——销售系统案例详解** MFC(Microsoft Foundation Classes)是微软提供的一套C++类库,用于构建Windows应用程序。它基于面向对象的编程思想,为开发者提供了丰富的功能,简化了Win32 API的使用。在...

    C++STL学习笔记.pdf

    迭代器提供了一种访问和操作容器中元素的抽象方法,并且通过它们可以以统一的方式访问不同类型的容器。 算法是STL的另一组成部分,它们定义了对容器中元素进行操作的模板函数。这些操作包括排序、搜索、比较、复制...

    effective c++读书笔记

    - 模板C++:模板编程允许编写独立于数据类型的代码,是C++泛型编程的核心,也是C++强大的抽象工具之一。 - STL(标准模板库):STL是一个包含容器、迭代器、算法和函数对象的模板库,它提供了一组通用的、经过优化...

    VC++深入详解学习笔记

    **VC++深入详解学习笔记** 在编程领域,Visual C++(简称VC++)是Microsoft公司开发的一款集成开发环境,主要用于编写使用C++语言的应用程序。它不仅提供了编译器,还包括了调试器、资源编辑器等工具,为开发者提供...

    (转)一个优秀的C++学习笔记

    ### (转)一个优秀的C++学习笔记 #### 经验之谈 - **数组使用需谨慎**:在处理数组时,特别需要注意下标的操作。数组越界是编程中常见的错误之一,可能导致程序崩溃或者未定义行为。对于数组的访问应该始终保持在...

    千锋C++笔记.zip

    《千锋C++笔记》是一份综合性的学习资料,涵盖了C++编程语言的基础到高级概念。这份笔记由知名教育机构“千锋”提供,旨在帮助初学者和有一定基础的程序员深入理解和掌握C++这一强大的系统级编程语言。下面将详细...

    c++学习笔记。。。。

    在这个"**C++学习笔记**"中,我们可以深入探讨C++的各种核心概念和技术。 1. **基础语法**:C++的基础包括变量、数据类型、运算符、控制结构(如if-else,switch-case,for,while,do-while循环)以及函数。理解...

    c++学习笔记.zip

    10. **STL(Standard Template Library)标准模板库**:包括容器(如vector、list、map等)、算法(如排序、查找、迭代器操作等)和迭代器,极大地提高了C++程序员的开发效率。 11. **文件I/O**:C++提供了流式I/O...

    C++&C学习笔记

    ### C++&C学习笔记知识点概览 #### 类与数据抽象 - **概念**:类是一种用户自定义的数据类型,它将数据(属性)和作用于数据上的操作(方法)封装在一起,从而实现了数据的抽象。 - **特点**:与C语言中的结构体...

    C++基础笔记资料.zip

    C++起源于C语言,由Bjarne Stroustrup在1979年开发,旨在增加程序的抽象层次和类型安全性。C++引入了类、模板、异常处理等概念,使得程序员可以构建复杂、可维护的系统。以下是一些关键的C++知识点: 1. **基本语法...

    c++primer学习笔记(转)

    C++是一门强大的编程语言,其包含了...以上就是C++ Primer学习笔记中涵盖的一些主要知识点。通过这些知识点的学习,可以帮助我们深入理解C++语言的核心概念和编程范式,从而编写出更加高效、安全和可维护的C++代码。

    c++ 学习笔记

    【C++ 学习笔记】 C++是一种强大的、通用的编程语言,由丹麦计算机科学家比雅尼·斯特劳斯特鲁普在1979年基于C语言开发,最初命名为"C with Class",后逐渐演变为C++。1998年,C++正式成为ANSI/ISO标准,标志着其...

    c++源码笔记_非常值得一看

    《C++源码笔记——深度探索与实践》 C++是一种通用的编程语言,以其高效、灵活和强大的功能被广泛应用于系统软件、游戏开发、应用软件等领域。本笔记旨在深入剖析C++源码,帮助读者从实践中理解并掌握C++的核心概念...

    C++ 基础教程笔记

    C++中的成员函数和数据成员允许我们创建复杂的抽象数据类型。 五、构造与析构函数 构造函数是在创建对象时自动调用的特殊函数,用于初始化对象的状态。析构函数则在对象生命周期结束时自动调用,用于清理资源。这两...

    c++学习笔记w版.pdf

    在深入学习C++的过程中,首要的关键点是理解编程...总的来说,学习C++时,要注重基础概念,掌握标准库的使用,特别是容器和迭代器,以及面向对象编程的原则。通过不断的实践和理解,才能更好地驾驭这门强大的编程语言。

Global site tag (gtag.js) - Google Analytics