首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++系列笔记(九)

STL提供的关联容器包括: std::set——存储各不相同的入时进行排序;容器的复杂度为对数; std::unordered_set——存储各不相同的入时进行排序;容器的复杂度为常数。...这种容器C++11新增的; std::map——存储-,并根据唯一的排序;容器的复杂度为对数; std::unordered_map——存储-,并根据唯一的排序;容器的复杂度为对数。...这种容器C++11新增的; std::multimap——与map类似,但不要求唯一的; std::unordered_multimap——与unordered_map类似,但不要求唯一的。...std::find_if:根据用户指定的谓词集合查找std::reverse:反转集合中元素的排列顺序。 std::remove_if:根据用户定义的谓词将元素从集合删除。...listIntegers.erase(listIntegers.begin(),2); list的元素进行反转和排序 list 的一个独特之处,指向元素的迭代器 list 的元素重新排列或插入元素后仍有效

1K20

建议收藏 哭着喊着 从C语言转向C++刷算法

<< endl; } 基本语法程序 C++的基本类型和C语言无异 数值类型 整型: (整型)short 、(整型)int 、(长整型) long 浮点类型: (单精度类型)float (双精度类型...; cout << mp["hx"] << endl; cout << mp["h3zh1"] << endl; cout << mp["wow"] << endl; //注意在没有对应时,会返回默认...a 传递a的 进行函数运算 使用引用变量 int &a 直接变量本身进行操作 ## 引用& 例子 引用 void func(int &a) { // 传⼊入的n的引⽤用,相当于直接n进⾏行行了了操作...,只不不过func函数换了了个名 字叫a a = 99; } int main() { int n = 0; func(n); // n由0变成了99 } 传 void...func(int a) { // 传入的0这个,并不会改变main函数n的 a = 99; } int main() { int n = 0; func(n)

1.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

C++系列笔记(十)

假设有一个包含地址簿条目的list,其中每个元素都是一个对象,包含姓名、地址等内容,如何确保按姓名其进行排序呢?答案采取下面两种方式之一: list包含的对象所属的类,实现运算符<。...STL集合类   容器 set和 multiset让程序员能够容器快速查找存储一维容器。set和multiset之间的区别在于,后者可存储重复的,而前者只能存储唯一的。...鉴于set和multiset都是入时元素进行排序的容器,如果您没有指定排序标准,它们将使用默认谓词std::less,确保包含的元素按升序排列。...set和multiset查找元素 诸如set、multiset、map和multimap等关联容器都提供了成员函数find(),它让您能够根据给定的来查找: auto iElementsFound...<<endl; 删除set和multiset的元素 诸如set、multiset、map和multimap等关联容器都提供了成员函数erase(),它让您能够根据删除:setObeject.erase

48620

C++数据类型

内置类型 Tips:C++整型大小因编译器和操作系统的不同而不同,通常人们假定short16位,int32位,long32位,long long64位。...实际开发我们仅使用C++内置整型的int,如果程序需要大小不同的整型,那么: 合适情况下,推荐用size_t和ptrdiff_t 我们可以认为int至少32位,如果需要使用64位整数,那么使用...int(signed int) 4 无符号整型 unsigned (unsigned int) 4 整型 short(signed short) 2 无符号整型 unsigned short...,结果初始无符号类型表示数值总数取模后的余数。...使用未经初始化的指针引发运行时错误的一大原因,如果使用了未经初始化的指针,那么指针所占空间的当前内容将被当成一个地址,当这个地址指向的内存空间中正好有内容时,就可能引发难以预料的后果。

91920

C++入门指南及实战 第三步 基本变量

C++编程,内置了一些基本数据类型用来存储一些不同类型的。有字符类型 char 用以存储字符,如a、b、c、d、-、=、1、2、4、3、>、?...变量 变量指在编程中用来存储的容器。变量必须使用一个类型进行描述,表示该变量属于什么类型。如有一个变量 a,c++整形用int表示,那么使用整形变量a进行描述则可以写为:int a。...整形 以上的简介,已知整形使用int表示,整形还分为整形、长整形以及整形。整型、长整形、整形的区别是在于他们之间的存储空间①。整型16位②,长整形与整形的存储空间就是32为位。...,以上代码有逻辑顺序的,先定义变量a,并且赋值后才可以输出,如果没有定义变量a,就直接输出不行的,以下错误的方式: #include using namespace std;...有无符号 C++ ,整数类型还分为有符号和无符号两种,符号可以理解为符号- 与正号+ ,描述使用的关键字 有符号 signed 与 无符号 unsigned。

53610

【Example】C++ 标准库常用容器全面概述

每个存储桶,比较函数确定任何一元素是否具有等效的排序。 每个元素同时用作排序。...key_eq 返回用于比较相等性的函数对象。 Map 与 set 不同的map 系列键值与对应的形式,即 Key : Value 成对出现。...基于红黑树的 map 会根据的大小自动升序排序,基于哈希表的则无序。 map 可以根据的映射直接修改元素。但是,却是常量无法修改,只能删除已有的键值再添加新的。...equal_range 返回一迭代器。第一个迭代器指向Map大于指定的第一个元素。第二个迭代器指向Map等于或大于指定的第一个元素。...每个存储桶,比较函数将确定任一元素是否具有等效顺序。 每个元素存储两个对象,包括一个排序和一个

3.2K30

Rust语言尝鲜

而且一个报错信息就一万多行,然后必须大师级的程序员,精通 Intel规范的汇编语言的那种C++程序员,才能搞清楚什么地方出了问题。个人认为Rust对于程序员的综合素质要求,低于C++的。...该积分精确为-6.75.如果将积分区间500等分,计算结果为-6.723,相对误差为0.4%。... // 区间500等分     let a:f64 = 0.0;     let b:f64 = 3.0;     let dx = (b-a)/(steps as f64); //每个区间长度,注意整型变量显式转化成浮点型...比如下面的问题: use std::io::stdin; fn main() {     println!("What is 3+2? ...原来我们入时按了enter,\n意味着换行。 use std::io::stdin; fn main() {     println!("What is 3+2?

39630

【c++】set和map的使用

. set底层用二叉搜索树(红黑树)实现的 注意: 与map/multimap不同,map/multimap存储的真正的键值,set只放 value,但在底层实际存放的由...: set插入元素x,实际插入的构成的键值,如果插入成功,返回<该元素set的 位置,true>,如果插入失败,说明xset已经存在,返回<xset的位置,false...map,键值key通常用于排序和惟一地标识元素,而value存储与此键值key关联的 内容。...这些键值 map 内部被存储为 std::pair 类型的对象。...如果e作为map还不存在,map会使用默认构造函数创建一个对应的int(初始为0),然后执行++操作将其的增加到1。

3800

C++11新关键字

1.auto auto旧关键字,C++11之前,auto用来声明自动变量,表明变量存储栈,很少使用。C++11被赋予了新的含义和作用,用于类型推断。...auto关键字主要有两种用途:一变量定义时根据初始化表达式自动推断该变量的类型,二声明或定义函数时作为函数返回的占位符,此时需要与关键字decltype连用。...auto不能用来声明函数的返回。但如果函数有一个尾随的返回类型时,auto可以出现在函数声明返回位置。...如果函数抛出了没有异常说明列出的异常,则编译器会调用标准库函数unexpected。默认情况下,unexpected函数会调用terminate函数终止程序。...alignof的操作数表示一个定义完整的自定义类型或者内置类型或者变量,返回一个std::size_t类型的整型常量。如同sizeof操作符一样,alignof获得的也是一个与平台相关的

3K10

STL之关联式容器map(二)

本文续:STL之关联式容器map(一) 3构造元素 emplace() 可以适当的位置直接构造新元素,从而避免复制和移动操作。 当容器现有元素的与这个元素的不同时,才会构造这个元素。...\n"; 4.获取元素 获取 map 容器的开始和结束迭代器以及反向迭代器,它们都可以访问容器的所有元素。 map 的成员函数 at() 返回的参数对应的对象。...当 catch 代码块的代码执行后,try 代码块的所有变量会被销毁,因此不再可以访问。 元素默认的构造函数会用所关联的对象生成一个新元素,如果关联的对象是基本数据类型,它的为 0。...,因此使用这个迭代器之前,必须先它进行检查。...<< " was not found" << std::endl; map 容器的返回只可能 0 或 1,0 表明元素不在容器

53520

STL中有哪些副作用或稍不注意会产生性能开销的地方?

比如在后台服务,有些容器类型的变量命中某些条件下要进行clear(),后续逻辑判断容器空的,就不在用之进行某些逻辑(比如遍历它,进行某种操作)。...下面简要概述一下,对于unordered_map而言,其中的元素类型std::pair 如果你这样遍历: std::unordered_map m; for (auto& p: m) { ... } 减少隐性的重复操作 从map查找某个key对应的value...这个是因为tree.size()无符号类型,有符号类型i和它比较的时候被自动转型成了无符号的整型,所以取值为-1的i,变成了一个极大的整数,所以hasNext()返回了false!...对于unordered_map也是类似,单线程不停插入元素的话,可能触发rehash,导致其他线程unordered_mapfind的过程core dump。

1.2K10

PTA刷题记录:L1-034 点赞 (20分)

输入格式: 输入第一行给出一个正整数N(≤1000),该用户点赞的博文数量。...输入时判断输入的标签是否存在于容器,若存在,则对应的 +1 ;若不存在,则向容器添加一个以该标签为,以 1 为的元素(表示这个标签出现一次)。...意外收获: 起初一直觉得一个地方很奇怪:我遍历容器取最大对应的时,我仅仅使用了判断条件 p->second >= num 就能总是取得的最大。...(这只是我最先的猜想,错误的)。...我就想如果 map 内的元素如上的话,仅仅使用了判断条件 p->second >= num ,那么最后结果应该输出 1 4 才,但是测试了以后,依然输出的正确答案 3 4。

1K20

C++ Qt开发:运用QJSON模块解析数据

Qt 一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,Qt我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QJson...该数据是以键值的形式组织的,其中键字符串,可以是字符串、数字、布尔、数组、对象(即嵌套的键值集合)或null,Qt默认提供了QJson系列类库,使用该类库可以很方便的解析和处理JSON文档...1.1 解析单一键值实现解析根的单一键值,例如解析config.json配置文件的blog,enable,status等这些独立的字段解析之前需要先通过QJsonDocument::fromJson...void remove(const QString &key) 从对象移除指定及其关联的。...则更进一步多键值增加了列表的支持,解析此类内容只需要依次逐级拆分即可,我们来看下如何实现这些键值的灵活提取;首先我们来实现ObjectJson的参数解析功能,读者可自行对比与之前1.3的区别

18210

C++基础知识一

main函数某种程度上比较特殊,但它的定义与其他函数一样的。...return:当该语句包括一个时,此返回的类型必须与函数的返回类型相容,如下所示: 添加描述 在上述例子,main的返回类型int,而返回0的确是一个int类型的 。...<<:该运算符左侧的运算对象必须一个ostream对象,右测要打印的。 endl:被称为操纵符。 作用:结束当前行,并将与设备的缓冲区的内容刷到设备。...命名空间:将库定义的名字放在一个单一位置的机制,命名空间可以避免名字冲突,C++标准库定义的名字命名空间std。 ::域运算符:用处之一就是访问命名空间中的名字。...——————>8位 wchar_t———>宽字符—————>16位 char16_t———>Unicode字符——>16位 char32_t———>Unicode字符——>32位 short————>整型

78700

C++ 特性使用建议

std::move无条件转换为右,而std::forward有条件转换为右,只会将绑在右上的参数转换为右,起到转发一个参数给到另一个函数而保持原来的左性质或者右性质。...结论: RTTI 有合理的用途但是容易被滥用,因此使用时请务必注意。单元测试可以使用 RTTI,但是在其他代码请尽量避免。尤其新代码,使用 RTTI 前务必三思。...人们编写正确的代码更加自信,因为他们知道所调用的函数被限定了能或不能修改变量值。即使无锁的多线程编程,人们也知道什么样的函数安全的。...constexpr 可以定义用户自定义类型的常量,也修饰函数返回。 14.整型 C++ 内建整型,仅使用 int。...此外要留意,哪怕您的并不会超出 int 所能够表示的范围,计算过程也可能会溢出。所以拿不准时,干脆用更大的类型。 15.64位下的可移植性 代码应该 64 位和 32 位系统友好。

1.6K20

【C++】 string类:应用与实践

数组,大小为26*sizeof(int),用来一一应26个字母(小写),记录每个字母出现的次数; ②然后遍历题目中的字符串s,计算出每个字母的个数存放在之前定义的数组; ③最后再通过遍历原字符串...可以将其修改为其他字符,如: std::getline(std::cin, line, ';'); 这将使用分号作为行分隔符 rfind函数使用方法: rfindC++的字符串成员函数,用于从字符串的末尾开始查找指定的子字符串...; ②根据下标依次相加,定义整型flag记录进位,如果相加的和大于10,flag就标为1; ④将相加后的和存放在string类(注意这里直接尾即可,后面我们再翻转字符串); 代码如下: class...; ④我们还需要通过一些方法验证计算结果是否溢出int范围的数据,超过了就直接返回最,但是这里要根据之前判断的符号位来决定返回的INT_MAX还是INT_MIN; ⑤一旦出现了数字,如果之后又出现了字符则直接返回之前求的即可...res : -res; } }; 结果如下: 这里还提供一种思路: 我们可以先将字符串str的有效数字及开始的符号位存放在另外一个字符串num,然后直接将字符串的字符转换为整型即可;

5500

标准关联容器一定比vector的查找速度快吗?

:定义的相等 基于 operator== 2,set::insert插入时会判断那个元素的是否已经set中了 : 定义等价 基于 operator< */ //1,operator== //...= w2_"<<std::endl; } //2,operato< //等价一般应用在标准关联容器,比如 set,multiset,map,multimap,排序中有意义 //基于一个有序区间中对象值得相对位置...//而:如果你想要string* 指针以字符串确定顺序被存储 std::set,不能使用默认比较仿函数 std::lessstd::string* //必须改为你自己的比较仿函数类,它的对象带有...,如果k已经map里,它的关联被更新成V /** 原理如下: 1,operator[]返回一个与 k关联的对象的引用,然后 v赋值给所引用 (从 operator[]返回的) 的对象 2,当要更新一个已存在的的关联时很直接...,自动选择调用接口,像这样 2-1 //2-1 //如果 k不在map m,高效地把pair(k,v)添加到m,否则高效地把和k关联地值更新为v,返回一个指向添加或修改pair的迭代器 //iterator

1.8K10
领券