C++
cjn_
这个作者很懒,什么都没留下…
展开
-
二维数组 new delete
#include<iostream>using namespace std;const int M = 10; //行数const int N = 20; //列数int main(){ //第一种,可以直接[][]访问。但是内存不连续,不是很推荐使用,除非M\N都不确定 int** pNum;//以int为例 pNum = new int*[M]; for (int i = 0; i<M; i++) { pNum[.原创 2020-05-20 16:16:27 · 369 阅读 · 0 评论 -
C++11中emplace_back和 push_back 的区别
c++开发中我们会经常用到插入操作对stl的各种容器进行操作,比如vector,map,set等。在引入右值引用,转移构造函数,转移复制运算符之前,通常使用push_back()向容器中加入一个右值元素(临时对象)时,首先会调用构造函数构造这个临时对象,然后需要调用拷贝构造函数将这个临时对象放入容器中。原来的临时变量释放。这样造成的问题就是临时变量申请资源的浪费。引入了右值引用,转移构造函...原创 2019-03-02 10:52:09 · 444 阅读 · 0 评论 -
C++ 类的静态成员及静态成员函数
对象与对象之间的成员变量是相互独立的。要想共用数据,则需要使用静态成员和静态方法。 只要在类中声明静态成员变量,即使不定义对象,也可以为静态成员变量分配空间,进而可以使用静态成员变量。(因为静态成员变量在对象创建之前就已经被分配了内存空间) 静态成员变量虽然在类中,但它并不是随对象的建立而分配空间的,也不是随对象的撤销而释放(一般的成员在对象建立时会分配空间,在对象撤销时会释放)。静态成员变量...转载 2019-03-05 22:02:06 · 192 阅读 · 0 评论 -
istringstream,ostringstream和stringstream
1、头文件#include <sstream>2、作用istringstream类用于执行C++风格的字符串流的输入操作。ostringstream类用于执行C++风格的字符串流的输出操作。stringstream类同时可以支持C++风格的串流的输入输出操作。3、代码1)istringstream#include <iostream>...原创 2019-06-03 14:59:30 · 675 阅读 · 1 评论 -
C++重写、重载
重载: (静态多态)1、同一作用域2、子类无法重载父类函数,父类同名函数将被隐藏3、重载是在编译期间根据参数类型和个数决定的重写: (动态多态)1、在子类中定义与父类中原型相同的函数2、函数重写只发生在父类与子类之间3、使用virtual关键字申明后能产生多态4、运行期间根据具体对象类型决定调用的函数多态满足的三个条件:1、要有继承 2、要有虚函...转载 2019-06-15 21:38:04 · 692 阅读 · 0 评论 -
笔试题
1、大富翁游戏大富翁游戏,玩家根据骰子的点数决定走的步数,即骰子点数为1时可以走一步,点数为2时可以走两步,点数为n时可以走n步。求玩家走到第n步(n<=骰子最大点数且是方法的唯一入参)时,总共有多少种投骰子的方法。输入描述:输入包括一个整数n,(1 ≤ n ≤ 6)输出描述:输出一个整数,表示投骰子的方法输入例子1:6输出例子1:32#...原创 2019-07-04 21:10:42 · 308 阅读 · 0 评论 -
C++类型转换:隐式类型转换、类类型转换、显示类型转换
C++ 语言是一种强类型语言,当我们需要用一种类型的对象来替代另一种类型的对象进行相关操作时,必须首先进行类型转换。C++语言中,类型转换有两种方式,隐式类型转换和显示类型转换。1. 隐式类型转换在有隐式类型转换的表达式中,不需要明确指定一个类型的对象该转换为另外哪一个类型,这个工作将隐含地由编译器来完成,编译器将分析表达式的含义,进行类型转换。隐式类型转换针对不同的类型有不同的转换方...转载 2019-07-10 22:00:12 · 1687 阅读 · 0 评论 -
C++ 输入处理
#include <iostream>#include <vector>#include <string>using namespace std;int main(){ string a; getline(cin, a); cout << a << endl; string b; get...原创 2019-08-27 16:47:46 · 288 阅读 · 0 评论 -
两个队列实现栈
void push(int x) { if (a.empty() && b.empty()) { a.push(x); return; } if (a.empty()) { a.push(x); while (!b.empty()) { a.push(b.front()...原创 2019-09-04 16:35:10 · 151 阅读 · 0 评论 -
make_heap,pop_heap,push_heap
一、概念堆可以看做一个完全二叉树,同时该完全二叉树满足双亲结点大于等于孩子结点(大顶堆),或者双亲结点小于等于孩子结点(小顶堆)。make_heap: 时间复杂度为O(N)push_heap: 时间复杂度为O(logN)pop_heap: 时间复杂度为O(logN)sort_heap: 时间复杂度为O(NlogN)二、代码// range heap example#...原创 2019-03-01 10:08:19 · 749 阅读 · 0 评论 -
NULL与0的区别、nullptr的来历
某些时候,我们需要将指针赋值为空指针,以防止野指针。有人喜欢使用NULL作为空指针常量使用,例如:int* p = NULL;。也有人直接使用0值作为空指针常量,例如:int* p = 0;。前者可能觉得:NULL作为空指针常量,名字很形象,可读性较强。后者可能觉得:NULL并不是C/C++语言的关键字,而是一个在标准库头文件<stddef.h>中定义的宏,因此要使用N...转载 2019-01-25 15:45:40 · 279 阅读 · 0 评论 -
C++常见面试题
1.new、delete、malloc、free关系delete会调用对象的析构函数,和new对应free只会释放内存,new调用构造函数。malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要...转载 2018-07-16 21:11:58 · 194 阅读 · 0 评论 -
vector之resize()/reserve()区别
OK, 话说序列式容器, 两个问题: Q1. 当前容器有多少个元素?Q2. 怎样重设容器的元素个数? A1: You know, 所有的STL容器都提供了size()这个操作函数,返回当前容器的元素个数. (参考 C++标准程序库自修教程与参考手册 P146).A2: vector, deque和list都提供了resize()这个函数来重设元素个数. 对于新增加的元素怎么...转载 2018-08-10 16:18:25 · 225 阅读 · 0 评论 -
C++11 STL容器新用法
一、常用1、using用法using Vector = Eigen::Matrix<FloatType, 3, 1>;// 类型别名,等同于typedef Eigen::Matrix<FloatType, 3, 1> Vector;2、std::move() 使用通过std::move,可以避免不必要的拷贝操作。std::move是为性能而生。...原创 2018-08-31 11:49:20 · 622 阅读 · 0 评论 -
stl中auto_ptr,unique_ptr,shared_ptr,weak_ptr四种智能指针使用总结
1. auto_ptrauto_ptr主要是用来解决资源自动释放的问题,比如如下代码:void Function(){Obj*p = new Obj(20);...if (error occor)throw ... 或者 retrun;delete p;}在函数遇到错误之后,一般会抛异常,或者返回,但是这时很可能遗漏之前申请的资源,及时是很有经验的程序员也有可能出现这种错误,...转载 2018-09-07 21:41:58 · 320 阅读 · 0 评论 -
C++ const关键词
1、指针使用const(1)指针本身是常量不可变,即指针指向的地址不可变 char* const p;(2)指针所指向的内容是常量不可变 const char* p;(3)两者都不可变 const char* const p;...原创 2018-09-08 10:21:37 · 197 阅读 · 0 评论 -
排序算法 C++
1、代码#include <iostream>#include <vector>using namespace std;//冒泡排序void bubble_sort(vector<int> &nums){ for (int i = 0; i < nums.size() - 1; i++) { // times ...原创 2018-10-01 19:42:38 · 757 阅读 · 0 评论 -
C++ 读写文件 ifstream,ofstream,sstream
ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间; 在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符: 1、插入器(<<) 向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<&l...原创 2019-01-11 15:34:55 · 925 阅读 · 0 评论 -
boost锁 boost::unique_lock/boost::shared_lock
boost锁的概述:boost库中提供了mutex类与lock类,通过组合可以轻易的构建读写锁与互斥锁。举个通俗的例子,如果共享资源是一个自动锁住的房间,互斥体是钥匙,进入房间必须取钥匙,离开房间应该还钥匙。这就对应着互斥体的lock(取钥匙)和unlock(还钥匙)。动态分配内存存在类似的情况。如果忘记delete,会导致内存泄漏。它是如何解决的?在栈上分配对象,要一个特点,那就是离...转载 2019-01-08 15:13:37 · 2357 阅读 · 0 评论 -
Boost.Foreach
1、hello,world!#include <string>#include <iostream>#include <boost/foreach.hpp>int main(){ std::string hello( "Hello, world!" ); BOOST_FOREACH( char ch, hello ) { ...原创 2018-05-12 15:29:11 · 227 阅读 · 0 评论