
C++
C++程序员Carea
十年一线开发经验,热爱 C++ ,热爱编程
展开
-
std::thread 与类对象结合
代码】stdthread与类对象结合。原创 2022-07-21 15:17:49 · 430 阅读 · 0 评论 -
cin 从错误中恢复继续读入
代码】cin从错误中恢复继续读入。原创 2022-07-20 10:53:26 · 210 阅读 · 0 评论 -
C++ ifstream获取文件大小
C/C++ 三种方式获得文件的大小_cpp_learners的博客-优快云博客_c++获取文件大小原创 2022-07-04 13:53:41 · 4733 阅读 · 0 评论 -
C++内存泄漏监控工具手动实现(60行代码)
C++初学者自学计划你的实现应该通过下面的测试用例:#include <iostream>#include "../MemoryTracer/Tracer.h"#include <vector>#include <memory>class A{public: A() { TRACE();//这里必须要加,入侵代码 } ~A(...原创 2019-10-21 22:03:14 · 1943 阅读 · 0 评论 -
Windows C++ 判断磁盘类型 判断目录所在磁盘类型 判断是否U盘路径
#include <iostream>//#include "classAh.h"#include <atlstr.h>#include <vector>#include <string>using namespace std;int main(){ vector<string> dir_list{ "C:", "D:", "E:", "F:", "H:", "J:", "J:\\temp\\",.原创 2022-03-31 13:56:14 · 2166 阅读 · 6 评论 -
C++使用多线程验证多核比单核快
代码是用两个线程同时计算素数,再用单线程算一遍。如果多个核都在运算,那么两个线程的版本应该在两个核上同时计算,这样会更早出结果。验证代码如下:#include <vector>#include <algorithm>#include <thread>#include <iostream>using namespace std;#include <chrono>using namespace std::chrono;l原创 2022-01-05 13:25:21 · 954 阅读 · 0 评论 -
C++17遍历文件夹中的所有文件(并过滤txt文件)
下面的代码会遍历当前目录下的子文件夹data_in中的txt文件:#include <iostream>#include <string>#include <filesystem> //path#include <vector>#include<regex> //正则表达式namespace fs = std::filesystem;using namespace std;vector<string> get_原创 2021-09-12 10:14:21 · 1350 阅读 · 0 评论 -
Windows C++ CreateThread
下面的代码创建两个线程,并执行:#include <Windows.h>#include <iostream>using namespace std;DWORD WINAPI send_message(LPVOID lpParameter){ cout << "send_message" << endl; return 0;}DWORD WINAPI receive_message(LPVOID lpParameter)原创 2021-08-12 07:13:30 · 462 阅读 · 0 评论 -
std::getline的一个坑
所以正确的读取文件的代码应该像下面这样写:std::vector<stock> read_line(std::ifstream &fin)//read line 函数 { string line;//line是临时变量 std::vector<stock> vec_line; while (true) { if (fin.eof()) { break; }...原创 2021-06-05 01:19:06 · 645 阅读 · 0 评论 -
正则表达式
\w 匹配字母、数字、下划线。等价于 [A-Za-z0-9_] [ABC] 匹配[]中的所有字符 [\s\S] 匹配所有。\s 是匹配所有空白符,包括换行,\S 非空白符,包括换行。 . 匹配除换行符(\n、\r)之外的任何单个字符,相等于 [^\n\r]。 [A-Z] [A-Z] 表示一个区间,匹配所有大写字母,[a-z] 表示所有小写字母。 特殊字符...原创 2021-02-26 09:12:48 · 189 阅读 · 0 评论 -
C++格式化
数字精度:精度设置小数位数http://www.cplusplus.com/reference/iomanip/setprecision/std::setprecision(5)数字宽度:宽度设置总长度http://www.cplusplus.com/reference/iomanip/setw/std::setw(10)...原创 2020-03-24 10:25:07 · 596 阅读 · 0 评论 -
C++初学者自学计划
初学者心理初学者,在校生0-1年:不愿意打基础,了解了就以为掌握了,看了书看懂了就认为已经掌握了,代码写出来编译通过了就认为已经掌握了,编译通过执行没有报错就认为掌握了。企业需求:执行通过,设计合理,编码规范,测试完备,基础训练次数多,基础扎实。初学者,应届生:只学最高深的技术,喜欢高并发,喜欢算法,喜欢多线程,喜欢设计;不喜欢开发界面,不喜欢细节打磨,不喜欢做增删改查。企...原创 2019-08-05 14:11:26 · 792 阅读 · 0 评论 -
StringHelper完成字符编码转换Unicode UTF8 ANSI
说明:1 这个版本至少我经历的3家公司都是这么用的;2 new失败不处理,我擦,new都失败了你还想搞啥?起死回生?写日志?拉倒吧,内存泄漏要用内存管理那一套方法(内存管理自动化:也就是不要去管理,交给STL和智能指针就完了)解决;3这里主要考虑的是Windows环境的编程,都#include<Windows.h>了就别整什么跨平台了。跨平台用QT,不用QT就别自己跨。...原创 2020-02-12 18:15:26 · 890 阅读 · 0 评论 -
你怎么就一根筋呢? STL之vector and string用还是不用
The minute you decide to use new for a dynamic allocation,you adopt the following responsebilities:只要你决定动态开辟内存空间,你就有活干了,下面的就是:1 You must make sure that somebody will later delete the allocation.你必须确保有哪个老几会把他在不用的时候删除,也许这个人就是你自己.2 You must ensure that the co原创 2010-12-12 09:39:00 · 1265 阅读 · 0 评论 -
c++执行时间的统计方法
有些时候我们在C++编程时需要统计和比较一些函数或者语句的执行时间,从而判断算法的效率。下面是其中一种方法: #include #includeint main(){clock_t one, two;one = clock(); // 开始计时 ... 要统计时间的代码 tw转载 2011-07-26 11:02:21 · 4656 阅读 · 0 评论 -
如何学好C++ 谈一下我个人的看法
第一步: c++入门的书籍看一看,同时将自己有问题的地方随时记下来,方便上机实现第二步:全面学习阶段,C++ Primer ,等一系列知名度很高的书籍.先看中文,后看外文.实验方法同步骤1第三步:学习C++的数据结构方面的书籍,学一门语言不去用相应的数据结构来打磨,就不知原创 2010-12-12 12:06:00 · 1461 阅读 · 1 评论 -
Andrew Koenig 的一些建议 C++沉思录
1 如果你靠评价编译工具谋生,这样做当然很好,否则就调入了一个陷阱工具是获取结果的手段,如果你只注意到手段而忽视了结果,就是在waste time 2 some part of C is essential,这些思想你应该成为习惯,if not ,do it.原创 2010-12-19 11:41:00 · 1202 阅读 · 0 评论 -
语言真的是相通的吗
之前学习C++,一直认为应该坚持STL舍去C里面的字符数组。但现在看看C里面处理类似文本问题却有自己的一套完备的方法。就拿给字符串排序来说吧,C的做法是先把待排序的字符串存在字符串数组中,另设一个和数组大小相同的字符指针数组准备排序,这里用的是指针排序,其实就是排原来数组的下标。原创 2011-08-25 17:41:19 · 2490 阅读 · 0 评论 -
使用STLlport
这是C++ STL的一个实现版本,因其开源,执行速度快,跨平台而饱受好评。下载 http://www.stlport.org/download.htmlSTLPort不得不说的故事--1.STLPort简介与VC中安装2008年08月03日 星期日 下午 11:53首先,要知道一个重要的概念,没有官方的C++编译器,也没有官方的C++ STLPort。我们总认为转载 2011-12-14 17:57:22 · 1303 阅读 · 0 评论 -
Effective STL 条款21: 关联容器的strict weak order(让比较函数对相等的值返回false) .
条款21: 永远让比较函数对相等的值返回false让我向你展示一些比较酷的东西。建立一个set,比较类型用less_equal,然后插入一个10:set > s; // s以“<=”排序s.insert(10); // 插入10现在尝试再插入一次10:s.insert(10);对于这个insert的调用,set必须先要判断出10是否已经位于其中了。 我们转载 2012-04-16 11:47:15 · 1251 阅读 · 0 评论 -
函数内临时变量的释放时刻
如果函数没有返回值,则函数内部的变量在函数执行结束之后全部释放;如果函数有返回值,则函数内临时变量在函数所在的赋值语句执行完毕之后释放.#include <iostream>#include <string>using namespace std;class Base{public:Base():selfid(++n){ cout...原创 2012-04-13 11:45:55 · 4280 阅读 · 0 评论 -
C/C++不同文件夹下包含头文件的方法及#include的使用(转载)
本文主要介绍了如何不同文件夹下使用预处理器指示符#include。假设我们有如下一个工程,其中包含了几个源代码文件和头文件。其中main.c是主源代码文件,里面包含main函数。在base中包含:func3.h,func3.c,文件夹main和文件夹func4在main中包含:main.c,func1.h,func1.c和文件夹func2。在func2中包含:func2.h转载 2012-07-31 16:02:35 · 5694 阅读 · 0 评论 -
STL iterators
STL 主要是由 containers(容器),iterators(迭代器)和 algorithms(算法)的 templates(模板)构成的. 对应于它们所支持的操作,共有五种 iterators(迭代器)。 input output \ / forw转载 2012-08-09 14:10:52 · 1237 阅读 · 0 评论 -
微软暑期实习笔试题 合并两个有序单链表
当时做这一题的时候就感觉有点繁琐,其实也不难。感觉面试官就是想看看自己的基础水平在哪里。 当自己不想写,有必须要写的时候才发现很繁琐。原来打算20行都不要,却越写越多,有的地方居然挤不下。最后只能时间到了,我还在纠结,因为给的是5分钟的时间。我自己也没想到居然没搞定。我还介绍了思路,但显然不是面试官想要的结果。他认为时间应该是绰绰有余的。回来之后痛定思痛!自己静下心来,慢慢写,10分钟原创 2012-07-31 10:43:02 · 2451 阅读 · 6 评论 -
指针与多维数组的那点事儿
最近笔试经常遇到这个p+1的问题,,还是《C++ Primer》说的明白:在C/C++中没有多维数组,只有元素是数组的数组。关于指针加1移动的距离:一个指针加一移动的距离是它指向的元素在内存中的大小。所以指向int的指针加1走过了4个字节;指向int[n]的指针加1走过了n*4个字节;以此类推。*p的类型是p所指向的元素的类型,所以*p+1是p所指向的素的类型加以之后的结果原创 2012-10-26 11:11:06 · 1530 阅读 · 0 评论 -
做自己的代码库要注意的问题
随着学习的增多,以及对相关的数据结构和算法的实现,发现很多简单的数据结构和输入输出程序最好是使用自己的版本。比如每次使用下面的代码肯定是不可避免的for(list::iterator i=li.begin();i!=li.end();i++)coutcout 上面的代码是不是很麻烦呢?你是否想过这样使用自己的测试代码呢?list_ li;li.prin原创 2013-01-12 10:57:33 · 2148 阅读 · 0 评论 -
10大最适合编程的字体推荐下载,让代码看起来更美更舒服!
10. Courier9. Andale Mono8. Monaco7. Profont6. Monofur5. Proggy4. Droid Sans Mono3. Deja Vu Sans Mono2. Consolas + 中文雅黑混合版1. Inconsolata原创 2012-12-03 11:09:21 · 1836 阅读 · 0 评论 -
C++的头文件
http://www.learncpp.com/cpp-tutorial/19-header-files/原创 2013-10-10 13:03:56 · 1181 阅读 · 0 评论 -
微软笔试题 大型文件外部排序(二路归并和k路归并的实现和比较)
这两种排序方法都是先将一个无序的大的外部文件,分成若干块,分别读到内存中。将每一块都先排好序,放到一个新的外部文件中。二路归并的思路是每次将外部排序的文件两两合并,变成一个二倍大小的文件,然后对二倍大小的文件继续两两合并。直到最终合并为一个文件为止。k路归并是将外部排好序的子文件一次合并。先在各个文件中取出第一个数据,放到一个优先级队列中。然后选出最小的数据输出到外部结果文件里。并从最原创 2012-08-20 21:45:41 · 5108 阅读 · 0 评论 -
微软笔试题 给一个包含10^7个整数的大文件排序
这个题目有一个前提条件,大文件的中的数据有有一个特点,那就是不存在重复的数据。就算是重复的数据,也只让你求出去除重复之后的那些数据的排序结果。 如果题目变成了这样,我们就可以考虑创建一个大的数组。数组的下表表示一个整数,数组的内容在我遍历文件的时候再赋值。如果数组下标代表的那个整数存在,我们就把数组的这个元素赋值为1,否则赋值为0.这样我们就可以再次遍历数组,把元素的值为1的那原创 2012-08-11 01:25:19 · 2271 阅读 · 0 评论 -
微软笔试题 跳台阶问题
题目 : 一个台阶有n个台阶。每次可以上一个台阶,也可以上两个台阶。有多少种不同的上法?可以这么递归的来考虑,第一次跳一个台阶,这种情况的跳法总数是后面的跳法总数f(n-1);第一次跳两个台阶,这种情况下跳法总数是后面的跳法总数f(n-2);所以全部的跳法数就是f(n)=f(n-1)+f(n-2),n>2f(1)=1,n=1f(2)=2;n=2这正是Fibonacci数列,可原创 2012-08-10 22:16:55 · 2140 阅读 · 2 评论 -
C++大端小段的判断和转换
当前的存储器,多以byte为访问的最小单元,当一个逻辑上的地址必须分割为物理上的若干单元时就存在了先放谁后放谁的问题,于是端(endian)的问题应运而生了,对于不同的存储方法,就有大端(big-endian)和小端(little- endian)两个描述。字节排序按分为大端和小端,概念如下大端(big endian):低地址存放高有效字节小端(little endian)原创 2013-12-09 09:52:25 · 6690 阅读 · 1 评论 -
C++ 编译器对字符编码的要求和处理方式
http://blog.youkuaiyun.com/dbzhang800/article/details/7540905长期以来,很多人都清楚,一旦C++源码中直接使用了中文,这样的源码想要跨平台(I18N)会非常困难。随着:Windows下:MSVC2010成为主流Linux下:GCC升级到4.6C++中的中文问题 才算有了一个比较优雅的、跨平台的Worka转载 2013-12-11 19:54:39 · 7941 阅读 · 0 评论 -
C++ 返回嵌套类的指针(必须加typename限制)
下面的typename不可少,否则编译器不知道嵌套类的名字templatetypename binary_tree::tree_node* binary_tree::find(const T& data){ return NULL;}上面定义了二叉树类tree_node,此类有一个节点类作为其嵌套类。原创 2014-01-01 11:52:16 · 1785 阅读 · 1 评论 -
C++编程规范
最大限度的使用引用和const引用在函数传递参数的时候,如果函数要改变这个值,则使用引用传递;否则就意味着仅仅是需要这个值,应该使用const是防止因不小心而在函数内部偷偷的改变了传进来的参数;使用引用是减少对象的创建引发的时空开销。函数不应该返回属于函数内部作用域的变量的引用局部变量的因为作用域超出后会析构,函数返回这种变量的引用会引发危险原创 2014-01-03 16:54:21 · 1394 阅读 · 0 评论 -
C/C++表达式求值顺序的过分讨论原来是没有必要的
裘宗燕:C/C++ 语言中的表达式求值经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句给n赋什么值?”m = 1; n = m+++m++;最近有位不相识的朋友发email给我,问为什么在某个C++系统里,下面表达式打印出两个4,而不是4和5:a = 4; cout C++ 不是规定 要弄清这些,需要理解的一个问题是:如果程序里某处修改了一个变量(通过赋值、增量转载 2013-01-16 14:14:44 · 1155 阅读 · 0 评论 -
C++派生类的输出操作符重载
操作符重载本身实现并不困难,例如class A { friend ostream& operator { os }private: int value;};但是如果A派生了新的类,为了能让同一个输出操作符自动识别继承自A类的对象并使用恰当的输出方式,则可以给基础类一个抽象的方法,派生类重写这个方法而达到针对不同的对象在运行时使用不同的输出格式.由于输出操作符不可以为抽象的,所以可以在不改变基类的这个公共接口的前提下另写一个实现输出的抽象成员方法print(),让输原创 2010-12-26 17:16:00 · 2303 阅读 · 2 评论 -
老码识途中学到的
在C/C++中嵌入汇编语言的方法使用_asm{ //要加入的汇编代码 },示例如下:int i, gi;void main(int argc,char* argv[]){ void* address; { _asm { mov address,offset _lb1 jmp address } i=2;_lb1: gi=12; }原创 2013-01-07 14:09:51 · 1971 阅读 · 2 评论 -
C++制作一个泛型容器(可以盛放各种类型的对象)
如果你想要一个可以盛放各种类型的对象,那么基本上可以说在C++里没有,或者你可以用vector<boost::any>或者其他的什么来模拟,我说那都不怎么好。问题就在于我的类型会在运行时动态的增加,你不可能知道我会增加什么类型,我的头文件也不会给你。 现在是不是觉得C++的泛型用不上了,是的,C++的泛型本质上是对相似代码的复用,做的事情都是同一件事情,但仅仅是处理类型的差别。...原创 2014-05-04 16:58:51 · 5177 阅读 · 0 评论 -
C++派生类的访问权限
下面用简短的代码说明在最常见的public继承情况下访问权限的变化#include using namespace std;class A{public: A():a(0),b(0),c(0){} int get_a(void ){return a;} int a;protected: int get_b(void) {return b;} int b;private原创 2014-03-24 16:00:16 · 1725 阅读 · 0 评论