c++
文章平均质量分 68
coordinate_blog
这个作者很懒,什么都没留下…
展开
-
c++中map unordered_map按照value排序几种优雅的写法
我们首先假设我们要操作的map、unordered_map对象是m。第一种做法是先建立一个vector<pair<type, type>>的容器。std::vector<std::pair<int, int>> tmp;for (auto i = tmp.begin(); i != tmp.end(); ++i)原创 2018-07-08 16:01:19 · 20667 阅读 · 3 评论 -
寻找数组中第n大的元素
0x00 问题简述给定一个数组,找出该数组中第n大的元素的值。其中,1<=n<=length。例如,给定一个数组A={2,3,6,5,7,9,8,1,4},当n=1时,返回9。0x01 先排序我拿到这个问题的地中思路就是先排序,然后通过位置索引相应的第n大的元素。我使用的是O(nlog(n))级别的排序算法,所以这种方法的时间复杂度应该也是O(nlog(n))级别的。那这个问题有没更好的解决办法呢?原创 2018-04-20 15:46:59 · 4264 阅读 · 0 评论 -
c++ ADL(Argument-Dependent Lookup)查找
0X00 简述ADL全称是Argument-Dependent Lookup的简写,作用是扩展命名空间的查找范围,通过函数参数查找函数的命名空间。0x01 问题引出我们通过一个例子引出为什么要有这种机制。现在我们有这样一种命名空间f1namespace f1{ struct data {}; data operator+(const data& A...原创 2018-04-19 17:09:01 · 2481 阅读 · 0 评论 -
c++中空字符串解释为True的困惑
首先我们看这样这个问题int main ( ){ if ("") cout << "hello"; // executes! return 0;}这对于其他非c++的程序员来说是很困惑的。为什么空的字符串是True?这个问题其实归根到底是NULL与空字符串的区别。空字符串实际上是const char[1],里面包含了\0字符,这不是NULL,自然是True。那么c++中到原创 2018-02-27 19:04:57 · 1582 阅读 · 0 评论 -
关于重载、隐藏、重写的一些思考(1)
开始这个问题之前,首先你要已经对于虚函数和虚函数表的概念有了一定得了解。首先说一下重载(overload)这个概念,这很简单,在C语言里面就有的东西。When two or more different declarations are specified for a single name in the same scope, that name is said to overloa原创 2017-11-03 16:23:02 · 616 阅读 · 0 评论 -
关于重载、隐藏、重写的一些思考(2)
关于重载、隐藏、重写的一些思考(1)内容我们谈到了override,我说它和namehiding看上去很相似。我们先验证一下,它是否有namehiding的一些特征,并且又有哪些不同。class Base{public: virtual void func1() = 0; virtual void func2(); virtual void func2(int)...原创 2017-11-05 16:27:11 · 676 阅读 · 0 评论 -
纯虚函数的调用
看到这个标题的时候你可能会惊讶?纯虚函数怎么可以调用呢?看下面这个例子class Abstract_base{public: virtual ~Abstract_base(); virtual void interface() = 0; const char* mumble() const { return _mumble;}protected: char *_原创 2017-11-04 09:16:29 · 9116 阅读 · 5 评论 -
静态绑定和动态绑定总结
^_^原创 2017-11-05 16:22:20 · 1601 阅读 · 0 评论 -
深度探索c++对象模型(7)
我在之前的文章里面有介绍过dynamic_cast ,但是对于它背后的实现原理一直没有探究,所以我会在本文中深入探究他背后的东西。之所以要使用dynamic_cast,主要就是解决downcast不安全的问题。原创 2017-09-26 08:19:23 · 510 阅读 · 0 评论 -
深度探索c++对象模型(4)
从最简单的问题开始class X{};class Y:virtual public X{};class Z:virtual public X{};class A:public Y, public Z{};每个类的大小是多少呢?我在vs2015上面的得到的答案是这样的(这里我使用了一个小技巧,在vs中,在项目——属性——配置属性——C/C++——命令行——其他选项中添加选项“/d1...原创 2017-09-26 15:49:34 · 607 阅读 · 1 评论 -
深度探索c++对象模型(6)
类里面返回类型不同的重载方法class Foo{public: Foo(); const int val(); int val();private: int _val;};我是用的编译器vs2015会报这样的错误 无法重载仅含返回类型不同的函数 当仅需读 _val 时,调用 const int val(); 当需要更改 _val 时,调用 int val();原创 2017-09-26 16:11:52 · 400 阅读 · 0 评论 -
STL容器array
为了使用array,首先必须加头文件#include <array>该类型被定义为一个class template,在命名空间std中,要注意的是Array并不支持分配器,也就是说不允许指定自己的allocatorArray的能力Array会把元素复制到原创 2017-09-26 16:15:43 · 683 阅读 · 0 评论 -
STL容器vector
Vector定义于头文件<vector>template< class T,class Allocator = std::allocator<T>> class vector;Vector的能力Vector支持随机访问,因此只要知道位置,就可以在常亮时间内访问任意元素。vector提供随机访问迭代器,所以适用于任意STL算法。capacity函数返回vector实际容纳量,如果超过这个量原创 2017-09-29 10:05:06 · 751 阅读 · 0 评论 -
STL容器list
list定义于头文件 <list>template< class T,class Allocator = std::allocator<T>> class list;列表是一个容器,它支持任何位置的元素快速插入和删除,不支持快速的随机访问。它被实现为双向的链表。与std::forward_list相比,它提供双向迭代的能力,但具有更低的空间效率。List的能力List在几个方面与arra原创 2017-09-29 10:06:58 · 351 阅读 · 0 评论 -
STL容器Map和Mutimap
定义于头文件 <map>template< class Key, class T, class Compare = std::less<Key>,class Allocator = std::allocator<std::pair<const Key, T> >> class map;std::map是一个有序关联容器,包含具有唯一键的键值对。键使用比较函数Compare原创 2017-09-29 10:09:40 · 752 阅读 · 0 评论 -
STL容器Set和Multiset
Set和Multiset定义于头文件 <set>template< class Key, class Compare = std::less<Key>,class Allocator = std::allocator<Key>> class set;std::set是一个关联容器,是一个有序的集合,集合中包含不可重复的、类型为Key的元素。排序通过使用类型为Compare的比较函原创 2017-09-29 10:08:42 · 476 阅读 · 0 评论 -
STL容器forward_list
Forward list定义于头文件 <forward_list>template< class T,class Allocator = std::allocator<T>> class forward_list;(C++11 起) 单向列表是一个容器,支持在其任何地方快速插入和删除元素,不支持快速的随机访问。它被实现为单向链表,和C中它的实现相比,基本上不会有任何开销。当不需要双向迭原创 2017-09-29 10:07:54 · 726 阅读 · 2 评论 -
STL容器deque
Deque定义于头文件 <deque>template< class T,class Allocator = std::allocator<T>> class deque;Deque的能力Deque与vector相比,功能上的差异如下: 1. 两端都可以快速插入和删除元素,而vector只可以后端。 2. 返回元素时deque内部结构会多一个间接过程,所有元素访问和迭代器的动作会原创 2017-09-29 10:06:04 · 320 阅读 · 0 评论 -
抽象类中的数据
纯虚函数的调用问题中我们谈到了我们可以去调用纯虚函数。class Abstract_base{public: virtual ~Abstract_base(); virtual void interface() = 0; const char* mumble() const { return _mumble;}protected: char *_mumble;原创 2017-11-04 09:35:08 · 1077 阅读 · 0 评论 -
虚函数表到底是怎么存放的
“when VTABLE is get created in Memory , In compiletime or runtime?”Compile time. The vtable is simple an array of function pointers that gets stored in the executable. It never changes and this array i原创 2017-11-04 16:02:39 · 1596 阅读 · 0 评论