![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
S1: STL
涛歌依旧
毕业后就职于华为和腾讯
展开
-
golang map和C++ map的一点小区别: m[xxx]形式的访问
golang map和C++ map有很多区别, 比如: 1. golang map是hash map, 而C++ map是red-black-tree map 2. golang map是无序的, 且每次遍历不稳定一致, 而C++ map是有序的, 且每次遍历稳定一致 现在看C++程序:#include <iostre...原创 2019-08-11 09:09:02 · 3166 阅读 · 1 评论 -
stl map find使用不当导致的低概率core dump问题的定位
最近呢, 收到低概率core dump告警, 不频繁, 但挺恼人, 那就展开定位呗。再低概率的core, 在亿万请求下, 必然会发生。 这么搞起: 1. 上外网core dump的机器一看, 没有core文件了, 于是从backup目录找到了备份的core 2. 看了一下core文件的大小, 太小, 无法定位, 这肯定是被截断了。原创 2016-09-15 00:16:14 · 15874 阅读 · 7 评论 -
C++ string find的误用
最近在代码中, 看到类似这样一段代码:#include #include using namespace std;int main(){ string s = "abc"; if(s.find("x")) { cout << "yes" << endl; } else { cout << "no" << endl; } return 0; }原创 2016-09-14 23:47:30 · 7674 阅读 · 6 评论 -
std::sort引发的core (这个分析还是很不错的!!!)
转载地址:http://blog.chinaunix.net/uid-23146151-id-3066266.html 这两天定位了一个由std::sort引发的core。写了下面的程序来复现此问题。#includestdio.h>#includevector>#includealgorithm>#include转载 2016-08-13 23:24:14 · 11148 阅读 · 3 评论 -
C++ string的一个误用
最近某同学开发了一个活动需求, 发布后, 我立即体验了一下, 发现有个值与预期不符, 我定位了一下, 发现是一个string的误用造成的, 错误用法为: string s; stringstream ss; ... s 居然就通过编译了! 最后发现, 应该用s =ss.str(); 那为什么之前没有发现问原创 2016-08-06 20:01:36 · 7476 阅读 · 4 评论 -
聊聊纠结了大半天的qua数据上报不一致的问题------经验:1. 思路很重要;2.map的下标操作要当心
遇到这样一个问题: 前端传qua参数给后台, 后台将此参数上报到罗盘, 例如: 前端给的数据是qua=xxx, 那么, 后台需要把对应的key(qua)和value(xxx)上报到罗盘。 但出问题了, 且看PK过程: 第一轮PK: 罗盘同学: 罗盘qua数据总量与预期严重不一致, 有一半的qua为空 后台(me): 我已经原创 2016-07-01 23:51:02 · 8059 阅读 · 1 评论 -
map如何按value来排序------用带pair的vector吧
我们知道, map是按照key来排序的, 那么, map如何按value来排序呢?------用带pair的vector吧。 看代码, 不说话:#include #include #include // pair#include #include using namespace std;bool comp(const pair &a, const pair &b){ r原创 2016-06-25 21:11:34 · 8030 阅读 · 1 评论 -
C++的vector居然没有find成员函数啊, 那就用泛型find吧
#include #include #include using namespace std;int main(){ vector v; v.push_back(1); v.push_back(2); v.push_back(3); if( find(v.begin(), v.end(), 1) == v.end()) { cout << "no1" << end原创 2016-04-10 12:42:59 · 15868 阅读 · 0 评论 -
《C++ Primer 》第五版 Stanley B.Lippman
C++ Primer是非常非常有名的, 当时在读书的时候, 很多同学都买了这本书, 我也不例外, 那时应该是第四版, 毕业后就送人了。 2015年打算换工作, 所以就提前买了一本新的,慢慢啃,补补C++中的一些盲点。 在我换工作之前, 已经非常认真仔细地看了一大半。 换工作后, 看这类书的时间就少了些, 但也陆续地看看, 算是基本扫尾了。 对原创 2016-04-09 23:18:43 · 9143 阅读 · 4 评论 -
火眼睛睛查coredump(stl sort)------永远让比较函数对相同元素返回false
看看如下代码的一个非常隐晦的错误, 虽然不会每次core dump, 但类似代码迟早会core dump, 好多人遇到过。 此问题极难定位, 看一下吧:#include #include #include using namespace std;struct Msg { int id; int score;};bool selfDefinedSort1( co原创 2016-04-02 00:19:50 · 8294 阅读 · 5 评论 -
垃圾的clear函数------stringstream类型对象的清空操作之坑(不是用clear)
平时经常用C++中的stringstream类型, 非常方便, 但最近踩了一个大坑浪费较长时间才定位到时清空stringstream对象时出现了问题, 上网搜索了一下, 原来, 很多人都踩过此坑。 我们先来看看demo代码:#include #include #include using namespace std;int main(){ stringstream ss; i原创 2016-03-25 00:26:15 · 9649 阅读 · 2 评论 -
用gdb来调试对stl的空vector进行操作而产生的core
通过前面的学习, 大家应该很了解gdb调试core了, 今天我们用gdb来调试对stl的空vector进行操作而产生的core. 先不说core, 而是来学学vector的front方法, 如下:[taoge@localhost test]$ cat main.cpp #include #include using namespace std;int ma原创 2015-11-15 09:26:25 · 8559 阅读 · 3 评论 -
结构体作为STL map的key时需要注意什么? (某公司招聘面试试题)
某公司招聘的面试环节, 有这样一个题目:结构体作为STL map的key时需要注意什么? 对于懂STL map的同学来说, 这个题目还是比较easy的, 先看程序:#include #include #include using namespace std;struct Info{ string name; int score;};int main(){ Info原创 2015-06-18 22:51:52 · 10582 阅读 · 1 评论 -
聊聊map和vector的迭代器失效问题(某公司招聘笔试试题)
当删除一个STL容器(比如map, vector)中的某个元素时, 会引起迭代器失效, 所以, 我们务必提高警惕。 某次笔试, 我遇到这样一个题目: 删除map<int, int>中value为5的倍数的元素。 该题看起来很自然很简单, 实则有迭代器失效的陷阱。 如果对迭代器失效问题一无所知, 则很容易写出如下的错误代码:#include #include using namespace std;typede原创 2015-06-16 00:12:43 · 16693 阅读 · 34 评论 -
利用map将“简写信件”转化为“原始信件”
我们首先来看这样一个场景: 某人很懒, 写信的时候, 经常用简写的形式代替完整的形式, 比如:9494--->Yes, it is!asap--->as soon as possiblesb--->se bi.... 现在, 要写一套程序, 将这些简单的直接还原为原始的完整形式。 其实, 思路是很自然的, 对简写信中的每一个单词进行判断, 如果需要转化,原创 2015-04-11 21:18:13 · 7623 阅读 · 0 评论 -
STL容器比较
由于找不到最原始的地方, 所以只能给这里:http://blog.csdn.net/dodolzg/article/details/6127949STL的容器可以分为以下几个大类: 一:序列容器, 有vector, list, deque, string.二 : 关联容器, 有set, multiset, map, mulmap, hash_set, hash_ma转载 2015-01-27 23:58:04 · 7626 阅读 · 0 评论 -
STL中的set---可以直接修改set中的元素么?
set就是互斥集合, 直接吃菜:#pragma warning(disable: 4786)#include<set>#include <iostream>using namespace std;int main(){ set<int> st; set<int>::iterato...原创 2015-01-04 23:59:43 · 18496 阅读 · 4 评论 -
一个与stl有关的概率coredump问题的定位
昨晚快下班的时候, 同学X说自己的代码有core, 而且还是概率的, 不太好搞定, W哥对此很感兴趣, 于是就展开定位。 我觉得这是个好的学习机会, 于是就在旁观背景:SVN库上的代码没有问题, 同学X加了代码后, 就有这个概率core了, 我们顺着W哥的思路来定位core.1. 直接上阵, gdb分析core, 没发现比较直观的线索。 2. 怀疑是编译原创 2016-10-15 00:21:40 · 7672 阅读 · 3 评论 -
访问长度为0的vector引起的低概率coredump问题的定位
最近发布版本后, 发现了一个低概率的core dump告警, 其实, 在互联网千万甚至上亿的请求下, 再低概率的core都能被频繁触发, 所以也算不上低概率, 每隔几分钟就有core, 那就展开定位吧。 首先基本可以肯定的是, core是由本次代码修改引起的。 先来做做前戏准备动作: 1. 确保core文件是完成的, 没有被截断的 2.原创 2016-10-15 00:59:13 · 8196 阅读 · 4 评论 -
map,hash_map和unordered_map效率比较
转载地址:https://blog.csdn.net/whizchen/article/details/9286557 原理介绍map介绍map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道...转载 2018-08-03 21:53:15 · 14484 阅读 · 4 评论 -
多线程操作C++ STL vector出现概率coredump问题分析------切勿对STL 容器的线程安全性有不切实际的依赖!
多线程操作全局变量,必须考虑同步问题,否则可能出现数据不一致, 甚至触发coredump. 前段时间, 遇到一个多线程操作了全局的vector的问题, 程序崩了。场景是这样的:某全局配置参数保存在一个vector中,需要定时更新(更新线程), 另外的工作线程去读取配置。 这种场景是非常普遍的。 在该场景中,程序没有枷锁,概率coredump, 实际情...原创 2018-07-27 21:48:03 · 10380 阅读 · 2 评论 -
用hash map和双向链表实现LruCache
之前介绍过hash table, 也介绍过hash map, 当然, 双向链表也早就说过, 现在来看看如何用这些东西来实现一个LruCache, 直接上代码:#include <iostream>#include <vector>#include <ext/hash_map> // for hashmapusing name...原创 2018-08-02 22:58:28 · 4564 阅读 · 2 评论 -
用C++来简要实现基于hash table的map------hashmap/unordered_map
map是一种映射, 在stl中, map是通过底层的红黑树来实现的, 查找复杂度是O(nlgn). 当然,也可以用哈希表来实现map, 也即本文要介绍的hashmap: rb tree--->stl map (查找复杂度是O(nlogn),key有序) hash table---> hash_map (查...原创 2018-08-01 23:38:27 · 4595 阅读 · 2 评论 -
从basic_string::erase异常(abort,coredump)之坑说起------来看看size_t和unsigned int的区别
最近碰到一个坑,来看看简化后的代码:#include <iostream>using namespace std;static string getCutRemark(const string &strRemark){ string strTmp = strRemark; unsigned int pos = strTmp.find("|"); i...原创 2018-04-11 23:13:10 · 5853 阅读 · 2 评论 -
C++中map和vector作形参时如何给定默认参数?
之前遇到过这种特殊场景, 我用static变量比较恶心地解决了问题, 其实, 有更优雅的方式:#include <iostream>#include <vector>using namespace std;int main (){ int a = int(); cout << a << endl; vector<...原创 2018-04-16 23:22:08 · 14340 阅读 · 5 评论 -
再来说说为什么stl sort会概率造成core dump
stl sort的不当使用会概率造成core dump, 这个问题已经说过好几次, 如果不防范, 一旦遇到, 比较难查出原因。 来看看有问题的代码:#include <iostream>#include <vector>#include <algorithm>using namespace std;bool compare(i...原创 2018-03-24 22:42:46 · 6496 阅读 · 1 评论 -
stringstream和char在一起时需要注意
最近碰到了一个stringstream和char联合使用的奇怪bug, 本文不具体说这个bug. 来看看程序:#include #include #include using namespace std;void test(const string &s1, const string &s2){ cout << s1 << endl; cout <<原创 2017-10-14 14:04:29 · 10124 阅读 · 7 评论 -
谨慎使用map的下表操作
我们都知道, 当map不存在某key时, 如果用下标操作, 便会产生新key。 因此, 要特别注意, 最近一个同事中招了, 如下:#include #include #include using namespace std;int main(){ map m; m["k1"] = "good"; // 同事A if(m["k2"] == "") { cout <<原创 2017-03-23 22:41:30 · 7507 阅读 · 1 评论 -
提前预防了一个低概率core
网络包的业务组成是 head + boby, 从head从解析出整个len后, 对len进行了合理性判断, 提前预防了一个低概率core, 不然就会访问非法内存, 嘎嘎。原创 2017-01-22 23:23:51 · 6997 阅读 · 0 评论 -
一个低概率core dump问题的解决------static搞起
最近, 某服务低概率core dump, 精定位, 发现core的地方是对象初始化的地方, 这就奇怪了。 而且, 在别的地方用得好好的, 唯独在这个服务中异常。为了便于叙述, 我把原问题简化为一个必现的问题:#include using namespace std;class A{public: A() { int *p = 0; *p = 0; } };cla原创 2017-04-08 23:01:44 · 8274 阅读 · 1 评论 -
stringstream真的很好用, 但要注意坑(clear函数之坑, 之前说过)
string可以拼接, 但遇到串和整数拼接, 就比较蛋疼, 还是stringstream好, 但stringstream有clear之后, 我们已经说过了, 所以要注意。 最近用stringstream, 真的是太爽了, 看看: #include <iostream>#include <sstream>using namespac...原创 2017-04-08 23:13:56 · 11806 阅读 · 1 评论 -
stringstream用错导致的core dump------居然耗费半小时, 唉!
最近在某处加了点代码, 代码就core dump了, 必现。 本来, 通过查找代码修改记录, 然后review一下, 就可以发现大问题的。 但我偏偏就把版本变动区间弄错, 导致没有review出来。 好吧, 那就定位。 玩core, 我已经很熟悉了, 可是呢? 无论怎么调节, core文件总是被截断, 尝试了各种开关, 还是不行。 遂放弃了调试core. 怎么办?原创 2016-12-10 15:45:52 · 8371 阅读 · 1 评论 -
awk、sort等命令搞定几十行代码C++做的事------用好工具, 事半功倍
在后台开发中, 经常遇到服务波动的情况, 一般来说, 在监控系统中可以看到这种波动, 那是否与我们机器上的错误log对应起来了呢? 我们有必要对机器上的错误log进行统计! 规范log中一般会有时间, 假设时间格式为: xxx[2016-11-20 hh:mm:ss]yyy, 那么怎样统计错误log是否集中在某以时间段呢? 写个C++程序吧: 结果:原创 2016-11-20 12:35:19 · 7956 阅读 · 3 评论 -
《ACM程序设计》 曾棕根
我没参加过ACM, 也没有玩过ACM, 当初纯粹是为了兴趣, 才买这本书的, 而且这本书满是程序, 是我的菜。 这本书的前面章节把常用的STL都讲了一遍, 虽然基础, 但非常不错。 我目前工作中用到的STL也都是这些! 书中后面主要是习题的演练, 很多思路都很不错, 能学到不少东西。 建议刚学C++或者想玩ACM的同学, 可以好好玩玩这本书。 今天在家, 顺手拿起这原创 2016-11-19 16:06:55 · 8674 阅读 · 1 评论 -
一起来看看protobuf中容易引起bug的一个细节
我们已经介绍过protobuf的使用了, 故不再赘述, 下面我们来看看如下代码的一个小bug: test.proto内容为:package NS; message PointReq { required int32 x=1; required int32 y=2; } main.cpp为:#include #includ原创 2016-11-05 19:59:41 · 11977 阅读 · 2 评论 -
STL中的deque介绍--- double-ended queue
deque即双向队列(double-ended queue),是一种在两端开口的连续线性空间,可以高效的在头尾两端插入和删除元素。 在deque中, 我们要尽量避免erase队列中间的元素, 这样效率低。 要erase怎么办? 还是用list吧。 不多说, 来认识一下deque:#include #include #include #define N 10using namespa原创 2014-12-29 00:11:45 · 8468 阅读 · 0 评论 -
STL中的list小结(面试被问过)
多年前, 去某公司面试, 被问过list和vector, 鉴于之前我们学习过vector, 在本文中, 我们只简要介绍一下list. 我不打算全面介绍list, 因为那是手册应该做的, 下面, 让我们来窥探一下与list相关的小程序吧:#pragma warning(disable: 4786) // 去掉相关warning#include #include #include #in原创 2014-12-27 22:59:13 · 7718 阅读 · 0 评论 -
再看代码中的映射(利用数组优化你的代码---好的代码结构可以让人少加班, 少通宵)
在博文http://blog.csdn.net/stpeace/article/details/27879953中, 我们谈论过数组的本质, 在博文原创 2014-09-21 16:19:21 · 8044 阅读 · 0 评论 -
C++ vector的排序------对于结构体vector, 需要自己实现比较
在很多面试中, 都会问到: 结构体作为map的key, 需要注意什么? 这个问题, 我在http://blog.csdn.net/stpeace/article/details/46553525中已经深入讨论过, 所以不再赘述。 本文来说说vector的排序, 最近刚好要涉及到, 所以来写个代码demo 由于结构体没有比较大小这一说法, 所以要实现结构体vector的排序, 必须自定义比较:原创 2016-03-20 23:42:13 · 14969 阅读 · 4 评论 -
要找重复的串, 好麻烦, 还是写个程序来搞吧---利用algorithm对vector<string>进行sort
文件中每个串独占文件的一行, 大概有接近400个串, 要找出其中重复的串, 有点麻烦, 于是写了个程序, 经测试ok.#include #include #include #include #include using namespace std;bool compare(string a, string b){ if(a < b) { return true; }原创 2015-03-10 21:47:23 · 7550 阅读 · 0 评论