C++学习
文章平均质量分 58
Kang_TJU
Talk is cheap!
展开
-
Introduction to Programming with c++ 10-1 stringstream使用
课本学习主要是熟悉stringsteam常用的几个例子。 P378页 stringstream provides an interface to manipulate strings as if they were input/ouput streams.代码第一个例子,主要用来实现字符串和浮点数(整数)的相互转换#include <iostream>#include <string原创 2016-10-12 22:59:28 · 374 阅读 · 0 评论 -
类的静态成员学习
本文记录我对c++ primer以及Introduction to programming with c++关于静态成员这一节的学习基本概念静态成员 从形式上来说,用static关键字声明的变量或者函数就是静态成员。它可以是public或者是private。对数据类型也没有过多的限制。 从意义上理解来说,静态成员是这样的一种成员:与类保持关联而不与类的对象保持关联。也即,类的静态成员存在于原创 2017-02-17 22:17:41 · 380 阅读 · 0 评论 -
定义一个只能在堆上(栈上)生成对象的类
#include <iostream>class A{public: A(){} void print(){ std::cout << "Hello, world!" << std::endl; } void destroy(){ delete this; }protected: virtual ~A(){ std::cout <&原创 2017-06-04 23:24:00 · 569 阅读 · 0 评论 -
c++学习-RAII初识
本文主要记载今天早上读到的两篇blog的一些读书笔记。参考链接如下: [C++中的RAII机制] [RAII惯用法:C++资源管理的利器]基本概念1.什么是RAII(Resource Acquisition Is Initialization)? 中文可将其翻译为“资源获取就是初始化”。当然,这句话肯定并没有揭示出背后本质的思路。 Bjarne这样写道:使用局部对象管理资源的技术通常称原创 2017-08-01 11:29:36 · 425 阅读 · 0 评论 -
c++学习-左值右值和std::move初探
本文记录我对左右值的学习,以及std::move语义的学习。基本概念何为左值,何为右值? 区分左值右值的真正说法是:能否用“取地址&”运算符获得对象的内存地址。也即左值其实关联了一块具体内存,但是右值没有。那么,右值又存在哪呢? 对于临时对象,它可以存储于寄存器中,所以是没办法用“取地址&”运算符; 对于常量,它可能被编码到机器指令的“立即数”中,所以是没办法用“取地址&”运算符;原创 2017-08-01 16:02:12 · 920 阅读 · 0 评论 -
c++学习-initializer_list
本文参考了[std::initializer_list]当中的内容,做一个简单的读书笔记。基本概念template<class T> class initializer_list; // 初始化列表类型从这个定义我们看出,initializer_list是一个模板类。具体来说这个类的作用就是根据c++语言当中的初始化列表声明,构造一个初始化列表对象。这样就可以将这个将这个初始列表的声明保存下来。#i原创 2017-08-02 14:55:15 · 666 阅读 · 0 评论 -
c++学习-c11中函数新特性
functor// functorstruct CmpPair{ bool operator()( pair<int,int>& lhs, pair<int,int>& rhs ){ return rhs.second < lhs.second; }};class Solution {public: vector<int> topKFrequent原创 2017-08-07 15:03:15 · 991 阅读 · 0 评论 -
c++学习-static_cast、dynamic_cast、const_cast和reinterpret_cast总结
简单围绕几种转换机制说一下。 参考如下链接:[static_cast、dynamic_cast、const_cast和reinterpret_cast总结]static_cast static_cast的转换格式:static_cast (expression).将expression转换为type-id类型,主要用于非多态类型之间的转换,不提供运行时的检查来确保转换的安全性。 其实从原创 2017-08-07 15:58:52 · 277 阅读 · 0 评论 -
c++函数返回引用的问题
这两天写Vec时遇见返回引用的问题,觉得之前对这个问题的理解不够深入。所以,本文进一步讨论下我对这个问题的理解。 本文参考了[c++函数返回引用]一文,此文写的较为清楚,大家可以直接参看此文。问题引入重载Vec的[]运算符时的接口如下:T& operator[]( size_type i ) { return data[i]; }const T& operator[]( size_type i原创 2017-06-27 15:15:11 · 1070 阅读 · 0 评论 -
LRUCache-c++实现
代码//LRUCache.h#ifndef LRUCACHE_H_#define LRUCACHE_H_#include <utility>#include <unordered_map>#include <list>template<class KeyType, class ValueType>class LRUCache {public: LRUCache(int capac原创 2017-09-04 09:55:43 · 656 阅读 · 0 评论 -
c++学习-std::list
这个东西到不难,有一些接口需要熟悉,暂时记录下。代码#include <list>#include <iostream>int main(){ std::list<int> mylist; typedef std::list<int>::iterator iter; iter it1; iter it2; for( int i = 1; i <= 3; ++i原创 2017-08-25 18:16:43 · 507 阅读 · 0 评论 -
c++学习-匿名名字空间用法
用法下午在学习levedb源码的时候,看到version_set.cc有这样一段代码:// Callback from TableCache::Get()namespace {enum SaverState { kNotFound, kFound, kDeleted, kCorrupt,};struct Saver { SaverState state; const原创 2017-09-05 14:44:53 · 1202 阅读 · 0 评论 -
c++学习-智能指针学习
本文记录我对智能指针的学习,主要分为库学习和自己对于智能指针实现部分的学习。 主演参考链接如下: [从auto_ptr说起] [C++ 11 创建和使用 unique_ptr] [shared_ptr线程安全性分析] [为什么多线程读写shared_ptr要加锁?] [C++设计模式——代理模式] [解引用、判空以及比较] [cplusplus-shared_ptr]概述什么是智能原创 2017-08-01 11:59:05 · 514 阅读 · 0 评论 -
c++学习-虚函数学习
本文记录我在看《深入探索c++对象模型》时虚函数的学习心得,当然也参考了互联网上的一些资料。先列出参考。 [虚函数浅析] [关于虚函数的那些事]基本知识1 . 虚函数的作用说白了就是:当调用一个虚函数时,被执行的代码必须和调用函数的对象的动态类型相一致。 2 . 编译器需要做的就是如何高效的实现提供这种特性。不同编译器实现细节也不相同。大多数编译器通过 vtbl(virtual table)和原创 2017-07-27 11:44:52 · 417 阅读 · 0 评论 -
c++学习-为什么要用迭代器
本文记录我对迭代器的一点理解。先列出参考的文章[LevelDB源码分析–使用Iterator简化代码设计]。我对参考文章的内容自己做了实现,我讲的不清楚的地方可以直接参考原文。为什么要设计迭代器这个东西 用迭代器可以很大程度上隔离容器底层实现,使用时只需依赖迭代器相对统一的方法/接口。 这是为什么要设计迭代器这个东西,我在看ACC的时候,容器-迭代器-算法这三者有着密不可分的关系,算法原创 2017-07-11 20:31:01 · 5428 阅读 · 0 评论 -
c/c++函数参数的入栈顺序和计算顺序
先给出本文参考的链接: [C/C++函数参数读取顺序 ] [关于c语言和c++中的函数参数的执行顺序的问题],裘宗燕老师的讲解非常准确。尤其是对于表达式计算,表达式的副作用,都有启发性的讲解。 [C++函数参数的入栈顺序]问题其实今天的学习始于这样一段代码的结果:#include <stdio.h>void foo( int x, int y, int z ){ printf( "%d原创 2017-06-15 11:06:27 · 1344 阅读 · 0 评论 -
vector实现
给出的实现,参照accelerated c++一书当中的内容。总结有几个点说一下啊: 1.注意三个指针的语义,data,avail,limit。增加limit之后,注意,修改avail的用法,尤其是迭代器那一块。 2.rule of three原则。 3.allocator的用法,allocate,deallocate,construct,destroy的用法,以及为什么要自己管理。我们只是使原创 2017-09-19 10:43:37 · 442 阅读 · 0 评论 -
c++学习-类型转换运算符
本文记录我对c++四种转换运算符的学习。参考的链接如下:[C++标准转换运算符const_cast]前言既然c语言提供隐式和显示的两种类型转换方式,为什么c++又要提供这四种类型转换运算符呢? C++相比于C是一门面向对象的语言,面向对象最大的特点之一就是具有“多态性(Polymorphism)”。很显然,c语言的类型转换没有覆盖的多态的特性,所以c++再次提出统一的四种类型转换运算符,要覆盖原创 2017-07-31 11:39:13 · 347 阅读 · 0 评论 -
c++学习-类的前置声明与使用头文件区别
今天在看Leveldb源码的时候,发现作者使用了很多前置声明,这个语法之前关注的不是很多,今天稍微总结下。 主要参考了下面文章: [关于C++中的前置声明]什么时候用一般是用头文件来声明要使用的新类型,但是当两个头文件形成环的时候可以使用类的前置声明来破除环。我看leveldb源码的时候,作者大量使用前置声明,并不是因为这个原因,忘了在哪看到过,在此处使用前置声明的原因应该是:前置 引用声明原创 2017-07-18 12:10:53 · 1013 阅读 · 0 评论 -
c++学习-reference to non-static member function must be called
问题直接上问题,我今天再刷题的时候,碰到了下面的编译错误。 reference to non-static member function must be called先来看错误代码:class Solution {public: string ReverseSentence(string str) { typedef string::const_iterator co原创 2017-07-21 15:45:47 · 11561 阅读 · 0 评论 -
Introduction to Programming with c++ 9-2 一个标准的基于对象的入门例子
课本学习P345页,给了一个关于TV对象的例子。优点:channel, volume两个属性的设置均需要对另外一个属性的基础上。通过返回值表明,函数执行的成功与否代码#include <iostream>/*电视频道1-120声音为1-20电视默认开机在频道1,声音为0*/class TV{public: TV() : channel_(1), volume_(0), on_原创 2016-10-11 22:53:39 · 516 阅读 · 0 评论 -
Introduction to Programming with c++ 2-10 类型转换学习
书本知识点 c++ISO建议c-type cast用static_cast<>代替 int i = (int)5.4; This is the same as: int i = static_cast(5.4);问题不使用输出的精度控制,怎么样恒定的输出小数点后n位小数。 比如,只能输出后两位的小数. purchase_amount = 197.55作为输入,tax原创 2016-09-30 11:51:50 · 468 阅读 · 0 评论 -
Introduction to Programming with c++ 10-2 replace strings and split strings
课本学习P376,find函数以及replace函数。 find函数及其用法: unsigned find( string s ) // Returns the position of the first matching substring s unsigned find( string s, int index ) // Return the position of th原创 2016-10-15 08:23:32 · 299 阅读 · 0 评论 -
Introduction to Programming with c++ 13-5 File Open Modes
本目列出c++的文件打开模式。 Mode Descriptinon ios::in Opens a file for input ios::out Opens a file for output ios::app Appends all output to the end of the file ios::ate Opens a file for output.原创 2016-12-01 20:57:49 · 393 阅读 · 0 评论 -
Introduction to Programming with c++ 13-7 BinaryIO
这一目主要是对BinaryIO的一些基本概念坐下总结。代码虽然不难写,不过这些基本概念倒是值得好好理解理解。基本概念Files can be classified into text and binary.text file and binary file A file that can be processed(read, created or modified) using a text e原创 2016-12-01 22:40:15 · 380 阅读 · 0 评论 -
Accelerated C++ 库算法实现字符串提取
本目主要讲一下字符串提取的问题。分别给出不使用库算法以及库算法,和一个增强版库算法的实现。问题考虑如下文本,提取其中的美国城市名称。每一行不同的城市由一个逗号和一个空格分隔开。//input.txtHouston, San Antonio, Los AngelesNorth Carolina, Oklahoma, Puerto RicoTexas, Utah, Virgin Islands思路原创 2016-11-20 16:45:25 · 383 阅读 · 0 评论 -
Introduction to Programming with c++ 13-3 文件结束符的一点小问题
问题讲一个书上提到的关于文件结束符处理的小问题,之前没有注意过这个点。 问题也很简单:从一组文件里面读取数字并求和。//scores.txt 注意:5后面有一个空格1 2 3 4 5考虑如下代码实现:#include <iostream>#include <fstream>int main( void ){ std::ifstream fin; fin.open( "sco原创 2016-11-18 22:09:35 · 396 阅读 · 0 评论 -
Introduction to Programming with c++ 13-7 eof的置位时机
问题考虑如下的问题,文件内容的复制。思路枚举字符的方式实现。 有下面的代码:int copy_file1( const std::string& src, const std::string& tgt ){ if( src == "" || tgt == "" ) { std::cerr << "Invalid argumnts!" << std::endl原创 2016-11-26 23:49:32 · 368 阅读 · 0 评论 -
经典造轮子之accumulate
轮子的代码是学习了官网之后写的,只为熟悉。链接如下[accumulate-c++]实现代码my_accumulate.h/************************************************************************* > File Name: my_accumulate.h > Author: kang > Mail:likang@tju原创 2017-01-06 10:39:04 · 311 阅读 · 0 评论 -
多态初识
本文主要记录我对Introduction to Programming with c++当中多态学习的笔记。整理了相关的知识点。基本概念继承和多态的关系 先简述我对这二者的理解,继承的作用主要是在进行类设计的时候,可以不用重新设计各个类,而是可以在已有类的基础之上,对这些已有类的特征进行继承,并且增加新的特征从而提高代码重用性的一种机制。其中,继承和派生从理解的角度来说主要是表达一种一般和特殊的原创 2017-02-12 13:34:48 · 283 阅读 · 0 评论 -
垂悬指针问题
问题垂悬指针问题,这个问题的定义我是指导的。通常是说当指向某块内存的指针被释放之后,需要及时置空。否则,如果不置空,当下次不小心访问到时,会导致错误。当然,这个问题说起来很简单。觉得也没什么太大的问题,但是指针这一块确实得非常小心,从下面我范的这个问题说起。下面这段代码是我刷leetcode的时候的一段代码,主要删除链表中重复的元素。当然下面的代码是正确的。/** * Definition for原创 2017-01-20 22:32:00 · 489 阅读 · 0 评论 -
Big Three设计原则学习
本文主要记录我对big three的粗浅理解,并且参考了[C++定式模型 - 解决Big Three问题的方法],对这一问题有了更深入的理解。问题什么是Big Three? 三法则(英语:rule of three,the Law of The Big Three,The Big Three;三法则,三大定律)在 C++ 程序设计里,它是一个以设计的基本原则而制定的定律,三法则的要求在于,假如类原创 2017-01-31 13:10:23 · 1114 阅读 · 0 评论 -
BigThree设计原则学习-对于派生类的处理
本文在[BigThree设计原则学习]的基础上对于派生类的情形进行讨论。问题对于派生类的情形,如果基类实现了BigTree,那么派生类应该怎么实现?需要自己再实现还是用系统默认的? 我自己的理解,派生类要对基类的初始化进行负责,因为派生类是基类的扩展,基类是派生类抽象上的自己,所以后者应对前者的行为负责。但是从层次上来看,二者并不在一个层次。虽然,当我们看派生类的时候,我们看的就是派生类,但是,原创 2017-02-01 12:51:29 · 347 阅读 · 0 评论 -
c++返回值优化的问题
本文总结以下我对返回值优化的学习,主要参考了下面这个链接的学习内容。 [C++中的返回值优化(RVO)]命名返回值优化(NRVO)二话不说,先上代码:#include <iostream>class A{public: A(){ std::cout << "Default constructor is called." << std::endl; } A( const A& rh原创 2017-06-16 14:34:24 · 604 阅读 · 1 评论 -
c++函数explicit修饰符
本文参考了以下两篇博客:[C++笔记(1)explicit构造函数], [explicit在构造函数的使用 及 详解],只是对自己的学习做一个简要的记录。问题引入 explicit修饰符的作用是什么,什么时候用?explicit的主要用法就是放在单参数的构造函数中,防止隐式转换,出现歧义.因为,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应参数的数据类型的数据转换为该类对象。如下原创 2017-06-27 17:37:22 · 1113 阅读 · 0 评论 -
经典造轮子-String类的实现
一个简单的版本#include <iostream>#include <cstring>class MyString{public: typedef size_t size_type;public: MyString(){} explicit MyString( int n, char ch = 0 ) : n_(n) { ptr_ = new char[n原创 2017-06-28 11:32:00 · 364 阅读 · 0 评论 -
Accelerated-c++-置换索引
问题第五章练习题5-1. 设计和实现一个程序以产生一个置换索引。 在一个置换索引当中,每个短语都是以这个短语的每一个单词作为索引的(类似倒排,内容做索引)。因此,假如有如下的输入: The quick brown fox jumped over the fence 得到如下的输出: The quick \t brown fox jumped over the \t f原创 2017-12-02 21:33:06 · 748 阅读 · 0 评论