c++
招财酷炫猫
长期招财
展开
-
什么是编译型语言和解释型语言?
计算机高级语言按程序的执行方式可以分为编译型和解释型两种。编译型语言是指使用专门的编译器,针对特定平台(操作系统)将某种高级语言源代码一次性“翻译”成可被该平台硬件执行的机器码(包括机器指令和操作数),并包装成该平台所能识别的可执行性程序的格式,这个转换过程称为编译(Compile)。编译生成的可执行性程序可以脱离开发环境,在特定的平台上独立运行。有些程序编译结束后,还可能需要对其他编译好的目标代码进行链接,即组装两个以上的目标代码模块生成最终的可执行性程序,通过这种方式实现低层次的代码复用。因为编译原创 2021-12-07 11:37:23 · 4267 阅读 · 0 评论 -
为什么会出现“烫烫烫”和“屯屯屯”?
为什么VC中会出现“烫烫烫”和“屯屯屯”呢?这来源于C/C++中变量默认不初始化。C/C++的变量分为声明和赋值操作,声明变量不会对内存区域进行清理,而赋值时才会操作内存。微软的VC编译器会将未初始化的栈空间以16进制的0xCC填充,而未初始化的堆空间使用0xCD填充,而0xCCCC和0xCDCD在中文的GB2312编码中刚好对应“烫”和“屯”字。因此,如果一个字符串没有结束符“\0”,直接输出的内存数据转换为字符串就刚好对应“烫烫烫”和“屯屯屯”。...原创 2021-12-05 20:52:43 · 1366 阅读 · 0 评论 -
优秀开源C++项目
LevelDbLevelDb是谷歌两位大神级别的工程师发起的开源项目,简而言之,LevelDb是能够处理十亿级别规模Key-Value型数据持久性存储的C++ 程序库。https://github.com/google/leveldbSGI STLSGI STL是STL代码的经典实现版本,虽然很多编译器不直接使用这个版本,但是很多却在此基础之上进行改进的。比如GNU C++的标准库就是在此基础之上改进的。这份代码还有一个好处是有注释,代码书写非常规范,只要花些时间读懂它并非难事。https://w原创 2021-07-27 16:37:26 · 1054 阅读 · 0 评论 -
程序员接单网站
程序员客栈码市开源众包智城外包实现网猿急送人人开发开发邦电鸭社区快码英选外包大师我爱方案网智筹自由职客sxsoft原创 2020-12-21 21:57:29 · 372 阅读 · 2 评论 -
C++在两个链表中拷贝结构体
#include <iostream>#include <string>#include <list>#include <string.h>using namespace std;struct File { string name; int size;};int main() { list<File*> l1; File* pf1 = new File(); pf1->name = "原创 2020-12-10 14:43:23 · 180 阅读 · 0 评论 -
linux C++判断路径是否存在是否文件文件夹
#include <iostream>#include <stdio.h>#include <string>#include <unistd.h>#include <sys/stat.h>// 判断文件是否存在bool IsPathExist(const std::string &path) { if (access(path.c_str(), 0) == F_OK) { return true;原创 2020-12-09 10:45:44 · 3265 阅读 · 0 评论 -
C++替换字符串中的所有字符
std::string &ReplaceAll(std::string &str, const std::string &src, const std::string &dst) { std::string::size_type pos(0); while (true) { if ((pos = str.find(src)) != std::string::npos) { str.replace(pos, src.len原创 2020-12-02 10:55:35 · 1072 阅读 · 0 评论 -
C++根据特定字符分割字符串
函数声明:bool Split(const std::string &str, std::vector<std::string> &ret, std::string sep = ",");函数定义:bool Split(const std::string &str, std::vector<std::string> &ret, std::string sep) { if (str.empty()) { return fa原创 2020-12-02 10:53:58 · 2495 阅读 · 0 评论 -
boost序列化与反序列化
#include <boost/archive/text_iarchive.hpp>#include <boost/archive/text_oarchive.hpp>#include <boost/archive/xml_iarchive.hpp>#include <boost/archive/xml_oarchive.hpp>#include <boost/serialization/list.hpp>#include <boo原创 2020-12-01 16:57:07 · 752 阅读 · 0 评论 -
C++封装一个IO类
// IOHelper.h#pragma once#include <iostream>#include <string>class IO {private: IO(); ~IO();public: // 输出字符串到屏幕 static void Output(std::string str, bool endl = true); // 获取一行输入 static bool Input(std::string &原创 2020-11-27 14:54:23 · 225 阅读 · 0 评论 -
统计C++代码行数
find . "(" -name "*.cpp" -or -name "*.h" ")" -print | xargs wc -l在项目目录下执行以上命令,统计C++的.h和.cpp文件中的代码行数。原创 2020-11-25 18:01:05 · 2603 阅读 · 0 评论 -
centos安装boost protobuf thrift redis hiredis
安装protobuftar zvxf protobuf-all-3.6.1.tar.gzcd protobuf-3.6.1 ./configure –prefix=/usr/local/ sudo make #要编译很久sudo make checksudo make installprotoc --version安装thriftwget https://github.com/apache/thrift/archive/v0.13.0.tar.gztar zxvf v0.13.0原创 2020-11-20 18:36:39 · 124 阅读 · 0 评论 -
visual assistx快捷键设置
vs - 工具 - 选项 - 环境 - 键盘。搜索VAssistX.NavigateBack,将快捷键设为Ctrl+Alt+左箭头搜索VAssistX.NavigateForward,将快捷键设为Ctrl+Alt+右箭头原创 2020-11-19 18:17:13 · 1297 阅读 · 0 评论 -
关于进程和线程
为什么一台计算机服务器可以同时处理数以百计,以千计的计算任务呢?这里依靠的是操作系统的 CPU 分时共享技术。如果同时有很多个进程在执行,操作系统会将 CPU 的执行时间分成很多份,进程按照某种策略轮流在 CPU 上运行。由于现代 CPU 的计算能力非常强大,虽然每个进程都只被执行了很短一个时间,但是在外部看来却好像是所有的进程都在同时执行,每个进程似乎都独占一个 CPU 执行。所以虽然从外部看起来,多个进程在同时运行,但是在实际物理上,进程并不总是在 CPU 上运行的,一方面进程共享 CPU,所以需要原创 2020-11-07 23:36:02 · 93 阅读 · 0 评论 -
函数调用时发生了什么?
我们以如下代码示例,描述函数调用过程中,栈的操作过程:void f(){ int x = g(1); x++; //g函数返回,当前堆栈顶部为f函数栈帧,在当前栈帧继续执行f函数的代码。}int g(int x){ return x + 1;}每次函数调用,操作系统都会在栈中创建一个栈帧(stack frame)。正在执行的函数参数、局部变量、申请的内存地址等都在当前栈帧中,也就是堆栈的顶部栈帧中。如下图所示:当 f 函数执行的时候,f 函数就在栈顶,栈帧中存储着 f 函数的局部原创 2020-11-07 23:27:52 · 677 阅读 · 0 评论 -
一个程序是如何运行起来的?
我们写的软件是文本格式的代码,这些代码不能直接运行,需要使用编译器编译成操作系统或者虚拟机可以运行的代码(可执行代码),它们都被存储在文件系统中。不管是文本格式的代码还是可执行的代码,都被称为程序,程序是静态的,安静地呆在磁盘上,什么也干不了。要想让程序处理数据,完成计算任务,必须把程序从外部设备加载到内存中,并在操作系统的管理调度下交给 CPU 去执行,去运行起来,才能真正发挥软件的作用,程序运行起来以后,被称作进程。进程除了包含可执行的程序代码,还包括进程在运行期使用的内存堆空间、栈空间、供操作系统原创 2020-11-07 23:24:24 · 2460 阅读 · 0 评论 -
Unix查看gcc/g++的默认include路径
`gcc -print-prog-name=cc1` -v`gcc -print-prog-name=cc1plus` -v或者:gcc -x c -v -E /dev/nullgcc -x c++ -v -E /dev/null原创 2020-11-06 12:07:41 · 237 阅读 · 0 评论 -
C++二叉搜索树
//BST.h#pragma oncetemplate <typename T> class BST;template <typename T> class BSTNode {public: friend class BST<T>; BSTNode() { lChild = rChild = parent = nullptr; data = nullptr; } BSTNode(T value) {原创 2020-09-01 18:27:51 · 83 阅读 · 0 评论 -
C++实现安全队列
#ifndef SAFEQUEUE#define SAFEQUEUE#include <iostream>#include <queue>#include <thread>#include <mutex>#include <condition_variable>using namespace std;template<typename T>class SafeQueue {public: SafeQu.原创 2020-09-01 17:59:27 · 407 阅读 · 0 评论 -
深入理解C++中内联inline函数和宏定义的区别
inline函数是C++引入的机制,目的是解决使用宏定义的一些缺点。内联函数与宏定义区别(1)内联函数在编译时展开,宏在预编译时展开;(2)内联函数直接嵌入到目标代码中,宏是简单的做文本替换;(3)内联函数有类型检测、语法判断等功能,宏没有;(4)inline函数是函数,宏不是;(5)宏定义时要注意书写(参数要括起来)否则容易出现歧义,内联函数不会产生歧义;为什么要引入内联函数?用内联函数替代宏定义,消除宏定义的缺点:宏定义使用预处理器实现,做一些简单的字符替换,因此不能进行参数有效性的原创 2020-08-31 18:54:58 · 840 阅读 · 0 评论 -
深入理解C++中的new/delete和malloc/free动态内存管理
new、delete 是 C++ 中的操作符,而 malloc 和 free 是标准库函数。原创 2020-08-31 18:35:44 · 222 阅读 · 0 评论 -
C++虚函数虚拟继承的一个例子
代码:/* * @Description: 虚函数虚拟继承 * @Author: liutq * @Date: 2020-08-26 19:27:59 * @LastEditTime: 2020-08-26 19:49:57 * @LastEditors: liutq * @Reference: 【十个例子让你完全搞懂 C++ 的虚函数】 https://www.cnblogs.com/bakari/archive/2012/08/12/2635369.html */#include &原创 2020-08-26 20:03:57 · 234 阅读 · 0 评论 -
不同编译器下C++基本数据类型的字节长度
#include <stdio.h>int main() { printf("sizeof( char ): %zd\n", sizeof(char)); printf("sizeof( short int ): %zd\n", sizeof(short int)); printf("sizeof( int ): %zd\n", sizeof(int)); printf("sizeof( float ): %zd\n", sizeof(float));原创 2020-08-18 18:33:10 · 738 阅读 · 0 评论 -
C++函数模板
#include<iostream>using namespace std;template <class T>void printArray(const T *array, int count) { for (int i=0; i< count; i++) { cout << array[i] << " "; } cout << endl;}int main() { const原创 2020-08-15 14:28:32 · 89 阅读 · 0 评论 -
C语言可变参数(va_arg,va_list,va_start,va_end)
#include <stdio.h>#include <stdarg.h>//void va_start(va_list arg_ptr, prev_param);//功能:以固定参数的地址为起点确定变参的内存起始地址,获取第一个参数的首地址.//va_list 类型的变量,va_list arg_ptr//这个变量是指向参数地址的指针,因为得到参数的地址之后,再结合参数的类型,才能得到参数的值。//void va_end(va_list arg_ptr);//将原创 2020-07-26 22:01:02 · 384 阅读 · 0 评论 -
C语言string.h中的memcpy(), memmove(), memset()等函数
#include <stdio.h>#include <string.h>//void* memchr(const void* str, int c, size_t n) //在参数 str 所指向的字符串的前 n 个字节中搜索第一次出现字符 c(一个无符号字符)的位置。//返回一个指向匹配字节的指针,如果在给定的内存区域未出现字符,则返回 NULL。void test_memchr(){ const char str[] = "http://www.baidu原创 2020-07-24 18:42:32 · 321 阅读 · 0 评论 -
C语言stdlib库中的malloc和realloc
#include<stdio.h>#include<stdlib.h>#include<string.h>//void *malloc(size_t size) //分配所需的内存空间,并返回一个指向它的指针。若失败,则返回NULL//char* strcpy(char* dest, const char* src) //把 src 所指向的字符串复制到 dest。//如果目标数组 dest 不够大,而源字符串 src 的长度又太长,可能会造成缓冲溢出的原创 2020-07-24 17:20:25 · 481 阅读 · 0 评论 -
大整数相乘——两个不超过100位的整数相乘
#include <iostream>#include <cstring>using namespace std;int main(){ char sz1[100], sz2[100]; cin >> sz1 >> sz2; int len1 = strlen(sz1); int len2 = strlen(...原创 2020-04-21 14:18:28 · 877 阅读 · 0 评论 -
C++判断一个字符串中是否全是数字
#include <iostream>#include <cstdio>using namespace std;bool IsdigitAll(string str){ for (int i = 0; i<str.size(); i++) { if (!isdigit(str[i])) { ...原创 2020-03-23 15:23:06 · 4730 阅读 · 0 评论 -
C++中string实战操作
前九位是uid,第十位是下划线,后面全是token字符串#include<iostream>#include<string>#include <cstdio>using namespace std;int main(){ // uid+token string strUidToken = "123456789_abc_def";...原创 2020-03-23 14:54:02 · 113 阅读 · 0 评论 -
C++11中的智能指针shared_ptr
多个shared_ptr可以指向同一个对象,当对象不再使用时,shared_ptr被自动清理。#include <iostream>#include <string>#include <vector>#include <memory>using namespace std;int main(){ // 初始化两个智能指针 ...原创 2020-03-23 14:00:56 · 85 阅读 · 0 评论 -
C++中对vector所有元素求和
两种实现方式:一种是自己写循环求和。一种是使用numeric中的accumulate函数进行求和。#include <iostream>#include <vector>#include <numeric>using namespace std;template<typename T>T SumVector(vector<T...原创 2020-03-20 18:13:17 · 35011 阅读 · 4 评论 -
C++11中的四种智能指针
前言C++ STL 提供了四种智能指针:auto_ptr、unique_ptr、shared_ptr 和 weak_ptr。其中auto_ptr 是 C++98 提供的解决方案,C+11 已将其摒弃,并提出了 unique_ptr 作为 auto_ptr 替代方案。虽然 auto_ptr 已被摒弃,但在实际项目中仍可使用,但建议使用较新的 unique_ptr,因为 unique_ptr 比 a...原创 2020-03-17 20:09:59 · 1859 阅读 · 0 评论 -
C++任意数值类型转string
#include<iostream>#include<sstream> using namespace std;template<class T>string ToString(T value){ stringstream strstream; strstream.str(""); strstream << val...原创 2020-03-13 15:31:33 · 551 阅读 · 0 评论 -
C++11中pair的用法
概述pair可以将两个数据组合成一种数据类型。C++标准库中凡是必须返回两个值的函数都使用pair。pair有两个成员变量,分别是first和second,由于使用的struct而不是class,因此可以直接访问pair的成员变量。基本用法pair<T1, T2> p1; //创建一个空的pair对象(使用默认构造),它的两个元素分别是T1和T2类型,...原创 2020-03-11 20:34:59 · 463 阅读 · 0 评论 -
C++输入输出运算符重载
#include <iostream>using namespace std;class Point{public: Point() { m_x = 0; m_y = 0; }; Point(int x, int y) : m_x(x), m_y(y) {}; ~Point() {}; friend ostream& operato...原创 2020-03-05 20:01:00 · 216 阅读 · 0 评论 -
C++类的构造函数列表初始化
#include <iostream>using namespace std;class Point{public: // 类的构造函数列表初始化 Point(int x, int y) :m_x(x), m_y(y) {}; ~Point(); int getX() { return m_x; }; int getY() { re...原创 2020-03-05 18:20:41 · 115 阅读 · 0 评论 -
C++从array数组向vector向量复制元素的两种方式
C++从array数组向vector向量复制元素的两种方式#include <iostream>#include <vector>using namespace std;int main(){ const int arr_size = 5; int arr[arr_size] = {1,2,3,4,5}; // 第一种方式 ...原创 2020-02-04 14:59:54 · 2361 阅读 · 0 评论 -
Visual Studio 2017快捷键
作者:tongqingliu 转载请注明出处:http://www.cnblogs.com/liutongqing/p/7048639.html Visual Studio 2017快捷键Ctrl+Shift+L: 删除当前行Ctrl+M,M: 隐藏或展开当前嵌套的折叠状态Ctrl+M,L: 隐藏或展开所有的折叠状态Ctrl+K,Ctrl+C: 注释Ctrl+K,Ctrl+U: 取消注释Ct原创 2017-06-19 14:49:29 · 7878 阅读 · 0 评论 -
C++引用和指针
作者:tongqingliu 转载请注明出处:C++引用和指针C++引用引用的基本用法:int a = 12;int &b = a; // b指向a,b是a的引用,b是a的别名下面看一个实例:#include<iostream>#include<vector>using namespace std;int main(){ int val = 123; int &re原创 2017-06-19 20:23:46 · 325 阅读 · 0 评论