1.标准模板库
模板是C++程序设计语言的一个比较新的重要特征,而标准模板库正是基于此特征。标准模板库使得C++编程语言在有了同Java一样强大的类库的同时,保有了更大的可扩展性。事实上,C++的模版,本身即是一套复杂的宏语言(macro language),宏语言最大的特色为:所有工作在编译时期就已完成。
这里以vector(向量)为例。C++提供了内建阵列的替代型态vector,vector 可以如同阵列一样的存取方式,例如使用下标(Subscript)运算子,并记得自己的长度资讯(size),您也可以使用物件的方式来存取vector(push、pop)。使用vector可以轻易地定义二维可调整型阵列。要使用vector,必须含入vector表头档。
(1) 声明向量前,必须引入其头文件
#include <vector>
using namespace std;
(2) 向量的声明方法:vector<向量里存储的元素类型> 向量名
vector<string> inventory;
vector<string> inventory(10); //初始大小为10的向量
vector<string> inventory(10,"nothing"); //初始大小为10,10个元素全都初始化为"nothing"
vector<string> inventory(myStuff); //创建一个新向量,其内容与myStuff相同
(3)向量中元素的插入:向量名.push_back(要插入的元素);
push_back()成员函数在向量的最后添加一个新的元素。
(4)返回向量中元素的个数:向量名.size();
(5)向量的索引:向量名[索引下标];(如数组一样)
(6)移除最后的成员:向量名.pop_back();
pop_back()成员函数移除向量的最后一个元素并将其大小减1
(7)移除向量所有元素:向量名.clear();
(8)检查向量是否为空:向量名.empty();若为空返回true否则返回false。
(9)插入向量:向量名.insert();添加至序列的任意位置。例如:
inventory.insert(inventory.begin(),"oldstring"); //inventory.begein()以下有介绍
以上语句是将"oldstring"插入在序列开头,原有的插入点之后的元素全部后移一个位置。返回值是新插入的元素的迭代器。实际上函数的第一个参数是迭代器类型。关于迭代器下面有介绍。
(10)移除任意成员:向量名.erase();可以移除位于中间的成员。例如:
迭代器:迭代器是将容器的潜力发挥到极致的关键。迭代器可以用于循环访问序列容器。迭代器的具体用法如下:
inventory.erase((inventory.begin() + 2));
以上语句移除了向量中的第三个元素。随后的元素都上移一位,返回值是移除的元素之后的那个元素。
(1)声明迭代器
有两种迭代器,声明方法如下(以string容器为例):
vector<string>::iterator myIterator; //常规迭代器
vector<string>::const_iterator iter; //常量迭代器
迭代器是标识容器中某个特定元素的值。常规迭代器可以修改其值,而常量迭代器只能读出特定元素的值,不能修改。
(2)循环访问向量
向量有两个成员变量函数:begin()和end(),前者返回容器中的第一个元素的地址;后者返回容器中的最后一个元素
之后的一个地址。实际上,迭代器中存储的就是向量中元素的地址,通过对迭代器进行自加,就能够得到下一个元素的地址。因此可以通过以下代码实现循环访问向量:
for (iter = inventory.begin(); iter != inventory.end(); ++iter)
{
......
}
(3)修改向量元素的值
由于迭代器可以看成是标记向量元素的地址,那么要取得该向量的值,只需要像解引用地址那样在迭代器名前加一个*。如果是常规迭代器,还可以对向量元素的值进行解引用。例如:
*myIterator = "newstring";
cout << (*myIterator).size();
(4)从向量中查找一个值:find(向量查找范围的下限,向量查找范围的上限,要查找的值);例如:
iter = find(inventory.begin();inventory.end();"newstring");
(5)对向量进行乱序:rand_shuffle(向量乱序范围的下限,向量乱序范围的上限);例如:
//srand(static_case<unsigned int>(time(0)));//用系统时间做随机数的种子,要自动转型成整型
random_shuffle(inventory.begin();inventory.end());
(6)对向量进行排序:sort(向量排序范围的下限,向量排序范围的上限);例如:
sort(inventory.begin();inventory.end());
另外,vector还有两个与动态增长有关的成员函数,capacity()和reserve()。前者返回向量的容量,即在程序必须为其重新分配更多的内存前,向量所能容纳的元素数目。它与向量的大小不是同一概念。向量的大小是指已经用的内存数,向量的容量是指分配了的内存数。如果分配给向量的内存全部用了还不够,就需要reserve()函数将向量的容量扩充额外的容量。例如:
if(inventory.capacity() - inventory.size() < 10)
{
inventory.reserve(inventory.capacity() + 100);
}
分享到:
相关推荐
·崭新的 "TR1" 标准程序库功能应用,以及与既有标准程序库组件的比较。 ·洞察 C++和其他语言(例如Java、C#、C)之间的不同。此举有助于那些来自其他语言阵营的开发人员消化吸收 C++ 式的各种解法。 目录: ...
1989年,《The Annotated C++ Reference Manual》一书的出版成为了标准化的基石,引入了模板、异常处理、命名空间、新的强制转型及布尔类型等特性。 1998年,C++迎来了里程碑式的事件——ISO/IEC 14882-1998标准的...
- **简单性**:Java的设计尽可能地简化了C++中的复杂特性。 - **面向对象**:Java是一种纯粹的面向对象编程语言。 - **健壮性**:Java拥有强大的异常处理机制和垃圾回收机制,能够有效避免程序崩溃。 - **安全性...
《Java核心技术卷一》是Java编程领域的一本经典著作,主要涵盖了Java语言的基础知识和核心概念。这本书的第十版更新了最新的Java版本内容,对于学习和理解Java编程有着极高的价值。以下是对这本书中涉及的一些关键...
例如,Java的泛型实现了类型擦除,这意味着编译后的字节码中不会保留类型参数信息,而C++模板会在编译时为每种不同的类型生成不同的实例。 ### 2. 定义简单的泛型 #### 创建泛型类 泛型类是一种带有类型参数的类,...
- 熟悉Java的标准库和API。 - 注重实践,通过项目来提升技能。 **8. Java语法格式** Java的语法类似于C/C++,但更加简洁和规范。例如,所有变量声明必须初始化,所有方法都必须在类中定义等。 **9. 代码注释** - ...
Java是一种广泛使用的面向对象的编程语言,以其跨平台、高性能和强大的库支持而闻名。对于初学者来说,理解和掌握Java的基础知识是至关重要的。以下是一些关于Java基础知识的关键点: 1. **Java语法基础**:Java...
3. 在面向对象编程中,如果p是父类Parent的对象,c是子类Child的对象,可以进行向下转型,即p=c,这在Java等语言中是允许的。但需要注意,这种做法可能导致运行时错误,如果p试图访问子类特有的属性或方法。 4. 在...
3. 编程技能:熟练掌握Python、C++、Java等至少一种编程语言,了解机器学习和深度学习的算法及工具,如TensorFlow、PyTorch等。 4. 能力素质:具备优秀的逻辑思维和沟通能力,对数据敏感,能发现关键信息,解决问题...
技能部分应详细列出你的编程语言掌握程度,如C++、Java、Python、JavaScript等,并说明你在实际项目中的应用。同时,列出框架和库的熟悉程度,例如React、Vue、Angular等,以及数据库管理经验,如SQL、NoSQL等。 ...
2. 熟练掌握至少一种编程语言,如C/C++、Python或Java,并且对RPA工具有一定的了解和实践经验。 3. 对SpringMVC、Springboot、springcloud和Mybatis等主流Java开发框架有深入理解和应用经验,这些框架常用于构建...
前端使用MFC进行UI设计,后端则可能采用如C#或Java等语言实现业务逻辑,数据库选用关系型数据库如MySQL或SQL Server,以确保数据安全性和一致性。 五、安全性与稳定性 为了保证系统的安全性和稳定性,需考虑以下...
5. **编程语言支持**:Kunpeng平台支持多种编程语言,如C/C++、Java、Python等。学习每种语言在Kunpeng上的特定优化技巧和最佳实践,以提高程序运行效率。 6. **多核编程与并行计算**:深入理解Kunpeng处理器的多核...
开发者可能使用编程语言如C++、Python或Java来编写控制逻辑,并使用数据库管理系统存储和处理生产数据。同时,友好的用户界面使得操作人员能够轻松理解和操作系统。 最后,考虑到成本效益,智能计数系统的设计需要...
转型是指将一个变量从一种数据类型转换为另一种数据类型的过程。 **Catalog 目录** 目录是指包含一系列条目的列表,例如数据库中的表目录或文件系统的目录结构。 **Chain 链(function calls)** 链是指一系列函数...
本项目利用SpringBoot框架与Ajax技术,结合Java后端和Vue.js前端,构建了一个高效、便捷的小区物业管理系统。以下是系统的详细知识点解析: 1. **SpringBoot框架** SpringBoot是由Pivotal团队提供的全新框架,旨在...
本文主要讨论的是一个洗衣店管理网络平台的设计与实现项目,该项目旨在利用计算机技术和网络化资源管理,将传统的洗衣店管理模式转化为现代化的信息...同时,此项目也为其他服务行业提供了一个信息化转型的参考模板。