自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一蓑烟雨任平生 也无风雨也无晴

一蓑烟雨任平生 也无风雨也无晴

  • 博客(57)
  • 资源 (3)
  • 论坛 (27)
  • 问答 (4)
  • 收藏
  • 关注

原创 C++11新特性应用--让你的程序更简洁、更漂亮

今天旧事重提,再写一点关于c++11的事儿,注意是说明一下使用C++11使你的程序更加的简洁,更加漂亮。说道简洁,我想最多想到的就是auto关键字的使用了。比如之前你这样定义一个迭代器:std::vector<std::stirng>::iterator iter = vec.begin();但是有了auto关键字,你就可以少些很多代码:auto iter = vec.begin();好吧,你可能早

2015-12-30 21:30:24 2797

转载 锤子代工厂倒闭 老罗的“相声”还好笑吗

今晚老罗又发布了新产品!以下文章出处: http://tech.163.com/15/1229/08/BC07IRSS000915BE.html过去大家大多抱着听相声的心态去参加老罗主持的新品发布会,那么这次老罗的“相声大会”还会逗乐观众吗?现在对于老罗而言,唯一的办法就是用产品说话。锤子T2的代工厂中天信近日正式发公告宣布倒闭,称资金链断裂,公司无法继续经营。正在准备T2发布会的锤子科技创始人罗

2015-12-29 22:45:01 1735

原创 实战c++中的智能指针unique_ptr系列--通过unique_ptr对shared_ptr进行初始化

首先需要明确的是,这篇文章不是要描述unique_ptr和shared_ptr两个只能指针之间的区别,主要就是为了用unique_ptr对shared_ptr进行初始化。#include <iostream>#include <memory>int main(){ std::cout << "start!\n"; auto customArrayAllocator = [](un

2015-12-29 21:52:57 3694

原创 实战c++中的智能指针unique_ptr系列-- unique_ptr与lambda的错误结合(尤其是捕获lambda中的unique_ptr)

lambda表达式是C++11新引入的东西,给我们带来了很多的方便,使得代码简洁明了。但是当我们把unique_ptr和lambda表达式结合的时候,错误就往往会出现,而且是致命的。直接看看下面的代码:#include "stdafx.h"#include <memory>#include <vector>#include <algorithm>class Message {public:

2015-12-28 21:06:14 4313 1

原创 实战c++中的智能指针unique_ptr系列-- unique_ptr的get()赋给普通指针后的崩溃(其实是生命周期惹的祸)

今天遇到一个错误,是关于unique_ptr的get方法的,忽略了。之前博客是这样写get方法的: 其中bar是一个智能指针,p是一个普通指针:p = bar.get(); 后,bar并非被释放,也就相当于指针p和智能指针bar共同管理一个对象,所以就*p做的一切,都会反应到bar指向的对象上。那么来看今天的代码:#include<iostream>#include<memory>class

2015-12-27 22:50:53 14145 5

原创 实战c++中的智能指针unique_ptr系列-- 使用unique_ptr来避免if多层嵌套

博文引用连接: http://www.jianshu.com/p/9898abc55677今天看到这个文章,觉得没有很nice。我们太喜欢流程控制了,在程序中写了太多的if else也许我们对于逻辑非常的清晰,但是对于阅读你代码的人来说就是一场灾难。很多人都说使用多态来避免过多的if else嵌套,但是有时候你会觉得新写一个类似乎有点小题大做,尤其在整个代码已经庞大的时候。还有人说,可以把if e

2015-12-26 19:06:52 2690 1

原创 实战c++中的智能指针unique_ptr系列-- unique_ptr的get_deleter方法(自定义删除器)

unique_ptr的成员函数在上一篇博客中几乎全部涵盖,其实还有一个很有踢掉,即std::unique_ptr::get_deleter字面已经很明显了,就获得deleter: Returns the stored deleterThe stored deleter is a callable object. A functional call to this object with a sin

2015-12-26 13:08:34 4777 1

原创 实战c++中的智能指针unique_ptr系列-- unique_ptr的operator=、operator bool、reset、swap、get等介绍

既然打算把unique_ptr写一个系列,就要详尽一点,有些内容也许在vector的时候有个涉及,但是现在还是再谈论一番。我们要把unique_ptr看做一个类,废话了,它当然是一个类。所以这个类肯定也重载了赋值运算符,即operator=。现在就开始看看operator=在unique_ptr中的使用: 官方描述如下:move assignment (1) unique_ptr& operat

2015-12-25 23:52:13 3070 1

原创 实战c++中的智能指针unique_ptr系列-- std::unique_ptr的构造(尽量使用C++14中的std::make_unique,而不是new)

上篇博客算是unique_ptr的一个开篇,就是简单说说为何要使用unique_ptr,与传统指针相比,智能指针的优势而已。现在就从构造开始说起!看看这些构造方法:default (1) constexpr unique_ptr() noexcept;from null pointer (2) constexpr unique_ptr (nullptr_t) noexcept : uniqu

2015-12-24 23:59:50 7963 1

原创 实战c++中的智能指针unique_ptr系列-- 使用std::unique_ptr代替new operator(错误:‘unique_ptr’ is not a member of ‘std’)

写了很多篇关于vector的博客,其实vector很便捷,也很简单。但是很多易错的问题都是vector中的元素为智能指针所引起的。所以决定开始写一写关于智能指针的故事,尤其是unique_ptr指针的故事。这是个开始,就让我们使用std::unique_ptr代替new operator吧!还是用程序说话:#include<iostream>int main(){ while (true

2015-12-24 22:05:02 8278 1

原创 实战c++中的vector系列--再谈vector的insert()方法(都是make_move_iterator惹的祸)

之前说过了关于vector的insert()方法,把vector B的元素插入到vector A中,vector A中的结果我们可想而知,但是vector B中的元素还会如何?看看之前写过的程序:#include <iostream>#include <vector>int main (){ std::vector<int> myvector (3,100); std::vector

2015-12-24 21:33:55 6403

原创 实战c++中的vector系列--对vector<自定义类>使用std::find 和 std::find_if 算法

之前博客讲了一些关于std::find和std::find_ if的一些用法,但是没有讲述对于vector中存储的是自定义的类,那么怎么样使用std::find和std::find_if进行查找呢?先定义一个类:class Item{private: std::string m_ItemId; int m_Price; int m_Count;public:

2015-12-23 21:19:12 26156 2

原创 实战c++中的vector系列--使用sort算法对vector<unique_ptr<string>>进行排序(sort函数“应输入 2 个参数,却提供了 3 个)

之前博客写了对vector使用sort算法进行的排序,之前也写到过vector<unique_ptr<string>>的一些处理方法。今天就写一下对vector<unique_ptr<string>>使用sort算法进行排序。#include<iostream>#include<string>#include<vector>#include<algorithm>#include<memory

2015-12-23 20:16:10 3450

原创 实战c++中的vector系列--vector应用之STL的find、find_if、find_end、find_first_of、find_if_not(C++11)

使用vector容器,即避免不了进行查找,所以今天就罗列一些stl的find算法应用于vector中。find() Returns an iterator to the first element in the range [first,last) that compares equal to val. If no such element is found, the function retur

2015-12-22 23:33:44 10735 1

原创 实战c++中的vector系列--使用sort算法对vector进行排序(对vector<string>排序、使用稳定的排序std::stable_sort())

写了挺多关于vector的操作了,正好工作中遇到对vector进行排序的问题,这里就讨论一下。直接使用sort算法,那就先了解一下:template <class RandomAccessIterator> void sort (RandomAccessIterator first, RandomAccessIterator last);template <class RandomAccess

2015-12-22 21:13:30 14007 4

原创 实战c++中的vector系列--vector的遍历(stl算法、vector迭代器(不要在循环中判断不等于end())、operator[])

遍历一个vector容器有很多种方法,使用起来也是仁者见仁。通过索引遍历:for (i = 0; i<v.size(); i++){ cout << v[i] << " ";}迭代器遍历:for (vInt::const_iterator iter = v.begin(); iter != v.end();iter++){ cout << *iter << " ";}算法遍历

2015-12-21 22:01:56 24776 2

原创 实战c++中的vector系列--vector的一些异常

今天就写一写vector的一些异常,可以捕捉的异常。out_of_range 相当于数组的越界了。vector会自动增大容量,但是如果索引超出了当前的size,就会引发异常。#include<iostream>#include<vector>using namespace std;int main(){ vector<int>v(4); std::cout << v[0]

2015-12-21 20:43:56 11181

原创 实战c++中的vector系列--正确释放vector的内存(clear(), swap(), shrink_to_fit())

关于vector已经写的差不多了,似乎要接近尾声了,从初始化到如何添加元素再到copy元素都有所涉及,是时候谈一谈内存的释放了。是的,对于数据量很小的vector,完全没必要自己进行主动的释放,因为那样对程序的效率几乎没有影响。但是当vector中存入大量的数据后,并且都数据进行了一些操作,比如删除后,如果我们能积极主动的去释放内存,那么是非常明智的。写到这里,应该明确了size和capacity的

2015-12-19 21:18:19 56429 9

原创 实战c++中的vector系列--C++11对vector成员函数的扩展(cbegin()、cend()、crbegin()、crend()、emplace()、data())

前面提到的emplace_back就是C++11所增加的内容。所以这篇博客就是想罗列一下C++11对vector容器的扩充。std::vector::cbegin和std::vector::cend 这两个方法是与std::vector::begin和std::vector::end相对应的,从字面就能看出来,多了一个’c’,顾名思义就是const的意思。 所以: std::vector::c

2015-12-19 18:07:00 7628

原创 实战c++中的vector系列--emplace_back造成的引用失效

上篇将了对于struct或是class为何emplace_back要优越于push_back,但是还有一些细节没有提及。今天就谈一谈emplace_back造成的引用失效。直接撸代码了:#include <vector>#include <string>#include <iostream>using namespace std;int main(){ vector<int> ive

2015-12-19 13:32:22 5661 2

原创 实战c++中的vector系列--知道emplace_back为何优于push_back吗?

上一篇博客说道vector中放入struct,我们先构造一个struct对象,再push_back。那段代码中,之所以不能使用emplace_back,就是因为我们定义的struct没有显示的构造函数。emplace和解? 放列的意思。这次我们不把struct当做vector的元素了,我们把一个class当做vector的元素,写下代码:#include <iostream>#include <

2015-12-19 10:51:50 41208 2

原创 实战c++中的vector系列--creating vector of local structure、vector of structs initialization

之前一直没有使用过vector<struct>,现在就写一个简短的代码: #include <vector>#include <iostream>int main() { struct st { int a; }; std::vector<st> v; v.resize(4); for (std::vector<st>::size_type i = 0; i <

2015-12-19 00:52:38 3494 1

原创 实战c++中的vector系列--vector<unique_ptr<>>赋值给vector<unique_ptr<>>

之前博客讲到 vector可以使用insert方法,将一个vector copy到另一个vector的后面。之前的博客也讲到过,如果vector容器内部放的是unique_ptr是需要进行所有权转移的。现在就来八一八如何vector<unique_ptr<>> insert to vector<unique_ptr<>>如果常规的vector,我们就可以这么使用insert:// insertin

2015-12-17 23:05:25 6978 1

原创 实战c++中的vector系列--vector<unique_ptr<>>作为函数的参数

现在就讨论一下,把vector作为函数的参数进行传递。 也是直接上一段代码:#include<iostream>#include<vector>#include <memory>using namespace std;void display_vector(vector<unique_ptr<int>> vec);int main(){ vector<unique_ptr<in

2015-12-17 21:20:13 5012

原创 实战c++中的vector系列--vector<unique_ptr<>>初始化(所有权转移)

C++11为我们提供了智能指针,给我们带来了很多便利的地方。那么如果把unique_ptr作为vector容器的元素呢?形式如出一辙:vector<unique_ptr<int> > vec;但是怎么给vec添加元素呢?看下面:#include<iostream>#include<vector>#include <memory>using namespace std;int main(){

2015-12-17 21:05:18 5643

原创 实战c++中的vector系列--可怕的迭代器失效之二(删除vector中元素)

有了上一篇博客《实战c++中的vector系列–可怕的迭代器失效(vector重新申请内存)》的基础,这里的内容就显得简单了。直接撸代码:#include<iostream>#include<vector>using namespace std;int main(){ vector<int> v; v.push_back(1); v.push_back(2);

2015-12-16 23:23:37 8204 2

原创 实战c++中的vector系列--可怕的迭代器失效(vector重新申请内存)

vector给我们提供了很多的方便,但是偶尔也会有陷阱。当不注意的时候,就掉入其中。说到底,还是对vector的机制不够彻底掌握。很轻松的写下这段代码:#include<iostream>#include<vector>using namespace std;int main(){ vector<int> v; v.push_back(1); std::vector<i

2015-12-16 23:05:33 6842 4

原创 实战c++中的vector系列--使用vector构造二维数组

二维数组有时候被用到,但是很少有人会使用vector来构造一个二维数组。首先,需要明确的是,在计算机的世界中,根本不存在二维数组,只是使用者的一个概念罢了。其实我们所谓的二维数组也必须是一段连续的内存。很多情况下,我们可以把常规的二维数组用一个vector表示,只要索引对应即可。那么,我若一意孤行呢,我就想vector里面放一个vector呢?#include <iostream> #incl

2015-12-16 20:42:23 11669

原创 实战c++中的vector系列--copy set to vector(别混淆了reserve和resize)

stl算法中有个copy函数,我们可以轻松的写出这样的代码:#include <iostream>#include <algorithm>#include <vector>using namespace std;int _tmain(int argc, _TCHAR* argv[]){ double darray[10]={1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,

2015-12-15 23:56:35 12139 1

原创 实战c++中的vector系列--assign() push_back() or insert()

之前博客《实战c++中的vector系列–构造、operator=和assign区别》写了关于assign()方法,其中有一条就是: replacing its current contents modifying its size accordingly 就是替换了vector中已经存在的元素。这里就不再说明assign了。push_back故名意思就是在vector末尾追加:void p

2015-12-15 21:51:26 6878

原创 实战c++中的vector系列--将迭代器转换为索引

stl的迭代器很方便 用于各种算法。但是一想到vector,我们总是把他当做数组,总喜欢使用下标索引,而不是迭代器。这里有个问题就是如何把迭代器转换为索引:#include <vector>typedef std::vector<char *> MYARRAY;// This does the trickinline const int iterator_to_index(MYARRAY &a,

2015-12-15 21:26:39 13011 2

原创 实战c++中的vector系列--构造、operator=和assign区别

vector也许是实际过程中使用最多的stl容器,看似简单,其实有很多技巧和陷阱。着重看一看vector的构造,暂时按照C++11:default (1) explicit vector (const allocator_type& alloc = allocator_type());fill (2) explicit vector (size_type n); vect

2015-12-15 20:48:13 5607 3

原创 实战c++中的string系列--不要使用memset初始化string(一定别这么干)

参考链接: http://www.cppblog.com/qinqing1984/archive/2009/08/07/92479.html百度百科第一次这么给力: void *memset(void *s, int ch, size_t n); 函数解释:将s中前n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。 memset:作用是在一段内

2015-12-14 21:32:20 8711

原创 实战c++中的string系列--将string用于switch语句(c++做C#的事儿, switch中break还是return厉害)

作为一个C++程序员,或是出于习惯,或是出于无奈,你多少次这么写:if (!strcmp(pszValue, "Value X")) DoThis();else if (!strcmp(pszValue, "Value Y")) DoThat();else if (!strcmp(pszValue, "Value Z")) DoSomethingElse();else

2015-12-14 20:57:06 18951 1

原创 实战c++中的string系列--函数返回局部变量string(引用局部string,局部string的.c_str()函数)

当函数返回字符串的时候,我们可以定义返回string和string&。1写一个返回string引用的函数std::string & TestStringReference(){ std::string loal_str = "holy shit"; return loal_str;}这个函数当然是错误的,编译器会提示我们: 返回局部变量或临时变量的地址: loal_str 即

2015-12-13 21:48:48 17399 2

原创 实战c++中的string系列--string的连接(+= or append or push_back)

string的连接也是经常用到的,string重载了一些运算符: 首先看一看重载+运算符,用于串联两个字符串对象: 源码:template<class CharType, class Traits, class Allocator> basic_string<CharType, Traits, Allocator> operator+( const basic_string<C

2015-12-13 20:15:15 6035 2

原创 实战c++中的string系列--string与char*、const char *的转换(data() or c_str())

在工程中,我们也有很多时候用到string与char*之间的转换,这里有个一我们之前提到的函数 c_str(),看看这个原型:const char *c_str();c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同. 这就看到了吧,返回值是const char*,这里需要注意一下。1 string转const char* 当然是用到上面所述的方法c_str():st

2015-12-13 11:43:02 9726 1

原创 实战c++中的string系列--CDuiString和string的转换(duilib中的cduistring)

使用所duilib的人定会知道cduistring类型,先看看这个类是怎么定义的:class UILIB_API CDuiString { public: enum { MAX_LOCAL_STRING_LEN = 127/*63*/ }; CDuiString(); CDuiString(const TCHAR ch);

2015-12-12 15:46:21 8330

原创 实战c++中的string系列--std:vector<char> 和std:string相互转换(vector to stringstream)

有时候也会遇到std:vector与转std:string 相互转换的情况。首先看一下vector<char>如何转string:std::vector<char> *data = response->getResponseData();std::string res;//方法一for (int i = 0;i<data->size();++i) { res+=(*data)[i];}

2015-12-12 13:30:05 40785 3

原创 实战c++中的string系列--string到LPCWSTR的转换

今天再来介绍一下如何从string到LPCWSTR的转换。LPCWSTR是什么类型呢? 看看如何定义的:typedef const wchar_t* LPCWSTR;顾名思义就是: LPCWSTR是一个指向unicode编码字符串的32位指针,所指向字符串是wchar型,而不是char型。比如说MessageBoxW的第二、第三个参数就是LPCWSTR类型。`MessageBoxW(__in

2015-12-12 12:40:20 28611 2

duilib开发dll、lib、头文件等

进行duilib开发需要的所有的dll、lib、头文件等

2015-09-02

重载时自增(自减)的前缀和后缀的区别

对于自增(自减)运算,前缀和后缀的优先级有所不同。在重载时候,前缀自增和后缀自增的方法也不相同,本代码详细阐述了两者的区别所在。开发平台VS2010

2014-10-25

2015年阿里巴巴面试题完美解决

2015年阿里巴巴实习生招聘,最难理解的一道算法题,完美解决

2015-04-04

逃离东北三整年

发表于 2018-09-25 最后回复 2019-07-25

程序员应该住在市中心还是城乡结合部?

发表于 2017-02-28 最后回复 2018-02-01

既然已经逃离东北,那么何时离开北京?

发表于 2017-12-07 最后回复 2017-12-11

逃离东北两整年

发表于 2017-10-08 最后回复 2017-10-09

逃离东北一整年

发表于 2016-10-07 最后回复 2017-07-03

中关村程序员的996强制加班与工作效率

发表于 2017-02-08 最后回复 2017-02-08

你明明不买锤子 为何总在关注罗永浩?

发表于 2016-10-19 最后回复 2016-12-09

东北的企业怎么思想转变

发表于 2016-10-11 最后回复 2016-10-26

逃离东北,逃到北京

发表于 2016-10-10 最后回复 2016-10-26

国足:死于封闭的性格

发表于 2016-10-16 最后回复 2016-10-17

C++单例模式以及线程安全

发表于 2016-09-18 最后回复 2016-10-10

你总问,全面发展还是术业专攻?这就是答案

发表于 2016-02-22 最后回复 2016-10-10

放毒了--Qt相关的技术

发表于 2016-09-28 最后回复 2016-10-07

为什么阿法狗不敢挑战麻将?

发表于 2016-03-13 最后回复 2016-07-14

程序猿(媛)和它(她)的双肩包

发表于 2016-03-01 最后回复 2016-07-14

有没有想一起翻译Meyers大师的新作《Effective Modern C++》

发表于 2016-01-08 最后回复 2016-06-17

c++中不包含string头文件和包含string头文件的区别何在,为何都能使用string

发表于 2015-12-11 最后回复 2016-03-13

锤子代工厂倒闭 老罗的“相声”还好笑吗

发表于 2015-12-29 最后回复 2016-03-13

C\C++编译器的未来.我们还需要C++么?

发表于 2015-10-27 最后回复 2016-03-06

微信为何先推出mac版本而后推出windows版本

发表于 2015-10-29 最后回复 2016-03-01

微软VS苹果 桌面操作系统的终极一战

发表于 2015-10-26 最后回复 2016-03-01

为什么有些人出3倍薪资也挖不走?

发表于 2016-02-22 最后回复 2016-02-25

你曾后悔进入 IT 行业吗?

发表于 2015-11-20 最后回复 2015-12-29

苹果vs谷歌:与微软的战争教会了苹果什么

发表于 2015-11-11 最后回复 2015-12-16

提交中的骂声:哪种编程语言最遭骂?

发表于 2015-11-12 最后回复 2015-11-20

Google Interview Questions: Software Engineer谷歌软件工程师面试

发表于 2015-11-02 最后回复 2015-11-12

为何我工作十年,内心仍无比恐慌

发表于 2015-10-21 最后回复 2015-10-26

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除