C++
C++有点难
记录,总结
展开
-
补码表示的16进制数转有符号十进制数 C++
参考了CSDN上一个大佬的代码,学习了做一下记录。#include <iostream>using namespace std;int hextode(char* hexstr){ if(hexstr ==NULL) return 0; char binary[17]={0};//放二进制字符串 //Convert strings to a long-integer value. long i32=strtol(hexstr,NULL,1原创 2021-05-27 22:56:51 · 775 阅读 · 3 评论 -
C++重载函数和重载加法运算符
#include <bits/stdc++.h>using namespace std;class printData{public: void print(int i){ cout<<"整数为:"<<i<<endl; } void print(double f){ cout<<"浮点数为:"<<f<<endl; } void print(ch原创 2021-01-09 14:34:02 · 647 阅读 · 0 评论 -
C++轮流打印ABC多线程
代码:参考大佬的代码#include <iostream>#include <thread>#include <condition_variable>#include <vector>#include <algorithm>//#include <pthread.h>#include <functional>//using namespace std;std::mutex mtx;std::condit原创 2020-12-25 16:34:56 · 773 阅读 · 1 评论 -
如何规范地写一个C++的String类
代码:#include <bits/stdc++.h>using namespace std;class String{public: //默认构造函数 String(const char *str = nullptr); //默认拷贝构造函数 String(const String& str); ~String(); String& operator=(const String& str);private:原创 2020-08-09 15:39:38 · 160 阅读 · 0 评论 -
C++BigInt运算整理
解决存储的问题可以用C++中的vector来存需要操作的数据,存数据的时候采用倒序的方式,这样的效率更高。产生的进位可以直接跟在后面而不用移动数据 也可以使用自己定义的顺序表seqlist类。解析一下seqlis类的成员以及函数1.构造函数2. 析构函数3. 尾插方法4. 头插方法5. 插入方法、插入的变种方法6. 删除方法、删除的变种方法7. 顺序表的大小方法8. 顺序表的容量方法9. 重载方括号[ ]10. 清除方法11. 判空,判满方法12. 增长空间的函数(当容量不够的.原创 2020-07-25 21:42:27 · 1062 阅读 · 0 评论 -
shared_ptr源码剖析
shared_ptr的源码:主要又下列这几个文件组成:main.cpp sp_config.h sp_counted_base.h sp_counted_impl.h shared_count.h shared_ptr.hsp_config.h#ifndef _SP_CONFIG_H#define _SP_CONFIG_H#define DISPLAY//配置:在构造和析构的时候是否打印对应的字符串#endifshared_ptr.h#ifndef _SHREAD_PTR_H#d原创 2020-05-20 11:11:08 · 815 阅读 · 0 评论 -
auto_ptr剖析
虽然auto_ptr已经被C++11弃用了,但是通过分析它的代码仍然能够学习到一些知识。auto_ptr的动机:动态开辟内存的时候,new完之后必须delete,否则会产生内存泄漏。但是如果程序在delete之前发生异常,那么delete语句就不能执行,就会产生内存泄漏。auto_ptr技术正是为了解决这一问题而存在的。首先需要引入包含其的头文件#include< memory >。智能指针本质上实际是一个对象,但它重载了"*“和”->"运算符。对象在销毁的时候,会自动调用析构函数。所以原创 2020-05-14 13:09:07 · 159 阅读 · 0 评论 -
基于引用计数的String类实现
class String{public: //构造函数 String(const char *str = "") { m_data = new char[strlen(str)+1]; strcpy(m_data, str); } //拷贝构造函数 String(const String &s) { m_data = new char[strlen(s.m_data)+1]; strcpy(m_data, s.m_data); } //赋值函数 String&原创 2020-05-13 21:42:29 · 229 阅读 · 0 评论 -
智能指针之基于引用计数的简单实现
#include <iostream>using namespace std;template<class T>class SmartPtr{public: SmartPtr(T *p); ~SmartPtr(); SmartPtr(const SmartPtr<T> &orig); // 浅拷贝 SmartPtr<T>& operator=(const SmartPtr原创 2020-05-13 15:23:46 · 216 阅读 · 0 评论 -
strcpy/strlen/strcat/strcmp的C++实现
strcpy的实现函数原型strcpy(char * des,const char *src),其中des和src所指的内存区域不可以重叠,并且des要有足够的空间来容纳src。#include <assert.h>#include <stdio.h>char * strcpy(char *des, const char *src){ assert(des != nullptr && src != nullptr); char *address原创 2020-05-13 12:09:40 · 242 阅读 · 0 评论 -
C++中的内存对齐
本篇博客主要通过一些例子来演示C++中的内存对齐例1:#include <iostream>using namespace std;#pragma pack(1)class A{public: char a;//1 short b;//2 double c;//8};#pragma pack()#pragma pack(4)class B1{public: char a;//2 short b;//2 double c;/原创 2020-05-12 16:47:54 · 376 阅读 · 0 评论 -
C++的四种类型转换运算符
static_cast关键字static_cast 只能用于良性转换,这样的转换风险较低,一般不会发生什么意外,例如:原有的自动类型转换,例如 short 转 int、int 转 double、const 转非 const、向上转型等;void 指针和具体类型指针之间的转换,例如void *转int *、char *转void *等;有转换构造函数或者类型转换函数的类与其它类型之间的转换,例如 double 转 Complex(调用转换构造函数)、Complex 转 double(调用类型转换函数)。.原创 2020-05-11 14:05:55 · 398 阅读 · 0 评论 -
关于字符串string和vector的一些简单处理
将string的首字符变成大写字母并输出#include <iostream>#include <string>using namespace std;int main(){ string s("some string"); if(!s.empty()) s[0] = toupper(s[0]); cout<<...原创 2020-03-15 21:58:02 · 572 阅读 · 0 评论 -
C++ Primer 第五版读书笔记
当一个算术表达式中既有无符号数又有int值时,那个int值就会转换成无符号数。把int 转换成无符号数的过程和把int 直接赋值给无符号变量是一样的。把负数转换成无符号数类似于直接给无符号数赋一个负值,结果等于这个负数加上无符号数的模。#include <iostream>using namespace std;int main(){ unsigned u = 10...原创 2020-02-12 15:27:55 · 156 阅读 · 0 评论 -
2019年秋招-京东测试开发岗
1.下列程序的执行后的结果为()#include <iostream>using namespace std;int foo(int n){ if(n<1) return n; return foo(foo(n-1)+foo(n-2));}int main(){ cout<<foo(5)<<endl...原创 2019-08-25 10:46:34 · 757 阅读 · 2 评论 -
C/C++基础知识点整理
1.#include<iostream>using namespace std;int main(){ int aa[8] = {0}; cout << &aa[0] + 1 << endl; cout << &aa[1] << endl; //cout << &aa[0]++ &...原创 2019-10-15 18:03:37 · 408 阅读 · 0 评论 -
c++中的三种new
c++中new的 用法主要有三种:new operator operator new placement new1.new operatornew操作符是c++中最长使用的操作符,用来向内存声请空间,并调用类的构造函数;相对应的delete操作符是先调用类的析构函数,然后在释放向内存申请的空间。两者的作用的过程存在某种对称的美学 。2.operator newoperator...原创 2019-02-22 22:14:35 · 11314 阅读 · 0 评论 -
C语言中的位运算
目录1.短路求值的问题2.&运算示例3.移位运算4.位运算的笔试题5.将不在范围内的数进行转换1.短路求值的问题#include <iostream>using namespace std;int main(){ int a = 0; int b = 2; int v1 = a && ++b;//...原创 2019-09-16 16:16:11 · 167 阅读 · 0 评论 -
C++类的基本特性
目录1.C++类中默认的六大函数2.关于C++类中this 以及拷贝构造函数的理解3.C++类中的赋值函数4.C++中调用拷贝构造函数的情况1.C++类中默认的六大函数#include <iostream>using namespace std;// C++的类中都有默认的六大函数class Test{public: Test(int d...原创 2019-09-17 21:24:41 · 1346 阅读 · 0 评论 -
高质量C++编程附录B试题
目录一、请填写BOOL,float,指针变量与“零值”比较的if语句。二、以下为Windows NT下的32位C++程序,请计算sizeof的值三、简答题1、头文件中的ifndef/define/endif 干什么用?2.#include 和 #include "filename.h"有什么区别?3.const有什么用途?(请至少说明两种)4.在C++程序中调用被C编译...原创 2019-09-21 14:19:07 · 218 阅读 · 0 评论 -
剑指offer--总结记录
2.3.2字符串面试题4:二维数组中的查找题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否有该函数。思路:在查找的过程中,首先选取数组中右上角的数字,如果要查找的数字不在数组的右上角,则每一次都在数组的查找范围中剔除一行或者一列,这样每一步都可以缩小查找范围,直到找到要查找的...原创 2019-09-26 20:23:25 · 148 阅读 · 0 评论 -
C++中的继承
学了C++这么久了,一直觉得它的继承体系很复杂,每次都被人搞得晕头转向的。这次来梳理一下,做个记录。1.继承:就是将父类中的数据和方法拿来(继承的方式会决定,原本父类的方法在子类中是什么方法),拷贝一份到子类中(父类的构造和析构函数是不能继承的)继承的作用主要是为了实现多态。我们主要从C++的两个角度来理解继承:站在对象的角度详细来说明,对于子类对象来说,只能访问自己的公有成员、公...原创 2019-09-28 20:04:22 · 168 阅读 · 0 评论 -
C++中的多态
1.下面的代码,可以帮助大家理解C++的多态。#include <iostream>using namespace std;// 只要类中有一个纯虚函数,那么A就是一个抽象类class A{public: //所有的接口,必须全部实现 virtual void Eat() = 0;// 纯虚方法、方法,变成了接口 virtual void Sle...原创 2019-09-28 22:39:34 · 99 阅读 · 0 评论 -
C++处理文件
使用std::fstream处理文件C++提供了std::fstream,旨在以独立于平台的方式访问文件。std::fstream从std::ofstream那里继承了写入文件的功能,并从std::ifstream那里继承了读取文件的功能,换句话说std::fstream提供了读写文件的功能。要使用std::fstream,需要包含头文件#include<fstream>使...原创 2019-10-02 11:52:04 · 491 阅读 · 0 评论 -
C++ 读.dat文件
1.通用的头文件util.h:// file name util.h// Created by Gabe with CLion.// 2019/10/2 11:55#ifndef UTIL_H#define UTIL_H#include <iostream>#include <string>#include <sstream>#inc...原创 2019-10-09 09:57:41 · 4550 阅读 · 0 评论 -
华为面试题的总结
1.给出下列定义:char acX[] = "abcdefg";char acY[] ={'a', 'b', 'c', 'd', 'e', 'f', 'g'};则正确的叙述是:数组acX的长度小于数组acY的长度。2.下面代码输出的结果是:#include <iostream>using namespace std;void example(char acHe...原创 2019-09-11 11:20:23 · 591 阅读 · 1 评论 -
奇安信2019年秋招测试岗(C++)部分试题
1.编程题题目描述:N个人排成一队,从1到5轮流报数,报5的人是幸运者,出列。报到队尾后,从队首接着报,依此循环。问:排在队尾的人是第几名幸运者?注:N为小于100000的正整数。例:1人排成一队,他就是第1名幸运者。3人排成一队,他就是第2名幸运者。5人排成一队,他就是第1名幸运者。8人排成一队,他就是第3名幸运者。即求:N人排成一队,队尾是第多少名幸运者?...原创 2019-09-10 10:34:17 · 819 阅读 · 0 评论 -
STL集合类
简介标准模板库中提供了一些容器类,以便在应用程序中进行频繁而快速的搜索。std::set 和 set::multiset 用于存储一组经过排序的元素,其查找元素的复杂度为对数,而unordered集合的插入和查找时间是固定的。容器set可以让程序员在容器中快速查找键,键是存储在一维容器中的值。set只能存储唯一的键值,multiset可以存储重复的键值。为了实现快速搜索,其内部结构类像二叉...原创 2019-05-03 14:32:13 · 533 阅读 · 0 评论 -
初识STL string类
实例化和复制STL string类:#include <string>#include <iostream>int main(){ using namespace std; const char* mystring = "hello string"; //C风格的字符串 cout<<"Constant string is : ...原创 2019-04-25 19:19:00 · 135 阅读 · 0 评论 -
初识STL
众所周知STL是C++的标准模板库,功能及其强大,深受大家的喜爱。多说一句听说python,已经登顶称王了。而我还在学远古级编程语言C++,实在是心痛啊。其实我本来是打算学pyhton的。STL具有公共的接口,却又有不同的实现版本,HP版本是所有STL实现版本的始祖,后续的有比如:PJ,SGI,RW版本。各个版本的内部实现不同但是都具有相同的方法。简单地说,STL是一组模板类和函数,向程序人员...原创 2019-04-20 19:39:05 · 116 阅读 · 0 评论 -
C++ Templates 第一部分阅读笔记
第二章 函数模板int const N = 100;//const用来修饰前面的int是个常值int* const book mark;//指针不能改变,指针指向的值是可以改变的typedef char* CHARS;typedef CHARS const CPTR;//指向char类型的常量指针typedef char* const CPTR;//仍然是指向char类型的常量指...原创 2019-04-15 21:38:48 · 232 阅读 · 0 评论 -
STL映射类
在力扣做题,两数之和。自己大概就是个只能写出暴力法的渣。但是还是得吐槽,力扣的答案代码竟然是Java,个人觉得用C才更好一些吧,毕竟C是最具有群众基础的语言了。看到优化的算法用到了map,于是过来学习一下C++的映射类。map 和 multimap 是键-值对容器,支持根据键进行查找。map 和 multimap的区别在于:后者能够存储重复的键,和前者只能存储唯一的键。为了实现快速查找,S...原创 2019-04-01 15:48:31 · 128 阅读 · 0 评论 -
初学C++需要着重理解的点
关于const 关于类的构造函数和析构函数 关于类的this指针 操作符的重载,以及重载的限制 c++中的友元 c++的多态只要类的方法不修改调用对象,就将其声明为const;将const的引用和指针作为形参可以提高代码的效率。void show() const;void stock::show() const;//类的构造函数,类的成员函数可以访问类的私有成员,私有的数据...原创 2019-02-27 13:32:46 · 98 阅读 · 0 评论 -
boost库的scoped_ptr
#include<iostream>#include<vld.h>#include<memory>#include<boost/smart_ptr.hpp>using namespace std;//using namespace boost;template<typename T>class scoped_ptr{p...原创 2019-02-27 14:33:50 · 113 阅读 · 0 评论 -
C语言中的main()函数的默认参数
C语言中的main()函数是有默认参数的。#include<stdio.h>int main(int argc, char * argv[]){}下面的例程帮助大家理解这两个参数的含义。#include<stdio.h>int fun (int a, int b){ int c; c = a + b; return c;...原创 2019-03-12 19:09:31 · 2796 阅读 · 0 评论 -
strlen和sizeof 的区别
下面会举一些具体的例子来说明两者的区别例子1#include<iostream>#include<vector>#include<string.h>using namespace std;int main(){ char sayhello[] = {'h','e','l','l','o',' ','w','o','r','l','d'...原创 2019-03-12 22:28:36 · 172 阅读 · 0 评论 -
C语言中的结构体
struct point { int x; int y;};上面是C语言中结构体的定义,其中关键字struct引入结构声明。结构声明由包含在花括号内的一系列声明组成。关键字struct后面的名字是可选的,称为结构标记(这里指的是point).结构标记用于为结构命名,在定义之后,结构标记就代表花括号内的声明,它可以作为该声明的简写形式。struct { ... } x,...原创 2019-03-18 16:10:11 · 194 阅读 · 0 评论 -
STL中迭代器(iterators)概念与traits编程技法
最近在学习jjhou的《STL源码剖析》,侯大师确实功力深厚,把SGI版本的STL解析的很透彻。让我等凡人能有机会窥见一些C++标准模板库的玄妙。看了第三章的内容,于是打算总结一番,方便后续继续学习。迭代器模式提供了一种方法,使之能够依序巡访某个聚合物(容器)所含的各个元素,而又无需暴露该聚合物的内部表达方式。STL中的迭代器STL的中心思想在于:将数据容器(containers)...原创 2019-05-03 21:44:19 · 193 阅读 · 0 评论 -
PJ版本STL中的list starded header
// list standard header#if _MSC_VER > 1000#pragma once#endif#ifndef _LIST_#define _LIST_#include <cstddef>#include <functional>#include <iterator>#include <memo...原创 2019-04-20 16:37:31 · 306 阅读 · 0 评论 -
C++string中的字母全部转化成大写字母
将C++中的string中的字母全部转化成大写字母,用来transform()方法#include <iostream>#include <string>#include <algorithm>#include <cctype>using namespace std;char toUpper(char ch){ return toup...原创 2019-09-08 16:43:35 · 2785 阅读 · 0 评论