![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
程序猿的探索之路
走好人生中的每一步路!
展开
-
【笔记】C++ 多线程:进程同时创建5个线程,各自调用同一个函数;线程调用的函数在一个类中,且应将该函数声明为静态成员函数;进程创建时设置pthread_attr_t属性及join功能;互斥锁的实现
注:os:ubuntu 10.04 c++1. 进程同时创建5个线程,各自调用同一个函数#include <iostream>#include <pthread.h> //多线程相关操作头文件,可移植众多平台 using namespace std; #define NUM_THREADS 5 //线程数 void* say_hello( void* args ){ cout << "hello..." << en..转载 2022-01-11 11:36:35 · 2552 阅读 · 0 评论 -
【笔记】c++ 使用thread类实现多线程
注:对于报错:我用的DEV C++,为什么报错说我没定义? [Error] #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options. [Error] ...转载 2021-12-07 12:34:56 · 1490 阅读 · 0 评论 -
【笔记】GCC/G++ 、动态库与静态库:动态库 执行速度慢和依赖性强,但升级简单、节省内存(牺牲了时间效率换取了空间效率);静态库 浪费空间和更新困难,但执行速度快(牺牲了空间效率,换取了时间效率
一、gcc/g++1、gcc 编译器简介 GCC(GNU Compiler Collection): GNU 编译器套件,它将易于编写、阅读和维护的高级计算机语言翻译为计算机能解读、运行的低级机器语言的程序 其功能由最初仅能编译 C 语言,扩增至可以编译多种编程语言,例如 C++、Go、Objective-C 等 GCC/G++ 编译标准: 不同版本的 GCC 编译器,默认使用的标准版本也不尽相同 可以借助 -st...转载 2021-12-07 12:58:59 · 2359 阅读 · 0 评论 -
OpenCV 官方文档
OpenCV: OpenCV-Python Tutorials原创 2021-12-05 21:19:15 · 913 阅读 · 0 评论 -
typedef的用法 && 结构体定义错误:expected primary-expression before ‘[‘ token
转载 2021-09-24 16:21:40 · 720 阅读 · 0 评论 -
opencv安装时生成makefile文件报错:The source directory “/home/wangbin“ does not appear to contain CMakeLists.t
Releases - OpenCV转载 2021-09-24 09:03:11 · 1170 阅读 · 0 评论 -
#include <opencv2/opencv.hpp>报错没有该文件夹,linux上面安装opencv
时隔多年,居然又要在Linux下编译OpenCV,然而这次居然折腾了一晚上,没想到会出现那么多问题。索性写个文章记录一下,防止下一次又碰壁。我是在虚拟机上跑的ubuntu18.04。配置如下:第一步 :下载依赖文件,这一步非常重要,如果是缺少某个依赖文件,编译过程也不会出错,但是在使用opencv函数的时候就是提示错误,只能删了重新编译,非常的坑。所以一定要先下载依赖文件。所以一定要先下载依赖文件。所以一定要先下载依赖文件。通过以下命令来安装依赖文件。sudo a..转载 2021-09-23 20:40:20 · 16835 阅读 · 3 评论 -
c++ 中——fatal error: opencv2/opencv.hpp: No such file or directory #include <opencv2/opencv.hpp>
终端执行下面命令:(你要确定你安装了opencv,否则先去安装Ubuntu 16.04 安装opencv的各种方法(含opencv contrib扩展包安装方法))sudo apt-get install libopencv-dev原创 2021-09-23 20:22:27 · 21633 阅读 · 61 评论 -
c++中 #if define ... #endif 用法
当第二次包含headfile_1.h时,前面一次已经定义了_HEADFILE_1_H,条件为假,#ifndef _HEADFILE_1_H和#endif之间的代码也就不会再次被包含,这样就避免了重定义。一般地,假如有一个C源文件(如sourcefile.cpp),它包含两个头文件(如headfile_1.h和headfile_2.h),而头文件headfile_2.h又包含了headfile_1.h,则最终的效果是该源文件包含了两次headfile_1.h。注:以上三种形式中#else不是强制的,可省略;原创 2021-09-23 15:05:33 · 891 阅读 · 0 评论 -
编译原理 实验一+二+三 词法分析+语法分析+表达式求值 采用递归下降的方法
// pL/0语言词法分析器#include<bits/stdc++.h>using namespace std;ifstream infile("c.txt");//词法分析的结果或语法分析的输入string str;//string变量进行字符识别string sym; //指针string sym1;int temp=0;void expressionAnalysis();//表达式分析void termAnaysis();//项分析void factor...原创 2021-04-15 16:12:28 · 589 阅读 · 0 评论 -
实验一 词法分析
//头文件#include <iostream>#include <map>#include <algorithm>#include <string>#include<string.h>#include<stdio.h>#include<time.h>using namespace std;string instr;//输入符号串int index;//当前输入符号读入字符的位置c...原创 2021-04-01 16:46:33 · 166 阅读 · 0 评论 -
词法分析 方法一
//头文件#include <iostream>#include <map>#include <algorithm>#include <string>#include<stdio.h>#include<time.h>using namespace std;string instr;//输入符号串int index;//当前输入符号读入字符的位置char character;//全局变量字符,存放最新读入的字...原创 2021-03-18 15:13:16 · 466 阅读 · 0 评论 -
getline解决cin读入字符串时空格阻断的问题
string str;使用 cin>>str; 遇到空格即阻断输入;解决办法:getline(cin,str);原创 2021-03-13 21:22:38 · 880 阅读 · 0 评论 -
freopen在文件和控制台读入输出调换的方法
例如,想打开“in.txt”,执行如下操作即可打开:freopen("in.txt", "r", stdin) //读模式打开:freopen("in.txt", "w", stdin) //写模式其实令人最头疼的不是这些,而是一旦重定向打开之后,不关闭的话就很痛苦了,但是还是让我找到了回复重定向的方法:在DOS/Win中可以使用CON:...转载 2021-03-13 21:02:51 · 488 阅读 · 0 评论 -
编译原理 词法分析+语法分析+表达式求值
上接语法分析先使用词法分析得到二元组,用语法分析二元组看表达式语法是否正确,如果正确,计算表达式的值,如果错误,输出语法错误信息。测试程序:// pL/0语言词法分析器#include<bits/stdc++.h>#include<iostream>#include <stdio.h>#include <stdlib.h>#include<stack>#include<string.h>...原创 2021-03-09 15:58:47 · 1062 阅读 · 0 评论 -
编译原理 语法分析
上接词法分析原创 2021-03-09 15:40:03 · 524 阅读 · 0 评论 -
编译原理 词法分析(两种简单的词法分析程序)
第一种,是输入到黑窗口的,供程序读入,‘#’ 结束读入,开始词法分析//头文件#include <iostream>#include <map>#include <algorithm>#include <string>#include<stdio.h>#include<time.h>using namespace std;string instr;//输入符号串int index;//当前输入符号读入字符的位置原创 2021-03-09 15:31:33 · 2387 阅读 · 0 评论 -
c_str函数
语法: const char *c_str();c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同. 这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针 比如:最好不要这样: char* c; string s="1234"; c = s.c_str(); //c最后指向的内容是垃圾,因.转载 2021-03-09 10:09:34 · 358 阅读 · 0 评论 -
str.copy用法展示
str.copy 三个参数,第一被赋值的起始地址,第二 赋值变量要拿出来进行复制的长度,第三 赋值变量的起始地址原创 2021-03-08 22:17:46 · 1099 阅读 · 0 评论 -
C++中字符数组与string的相互转换
字符数组转化成string类型charch[]="ABCDEFG";stringstr(ch);//也可stringstr=ch;或者charch[]="ABCDEFG";stringstr;str=ch;//在原有基础上添加可以用str+=ch;将string类型转换为字符数组charbuf[10];stringstr("ABCDEFG");length=str.copy(buf,9);buf[length]='\0';或者ch...转载 2021-03-08 19:01:37 · 1330 阅读 · 0 评论 -
freopen() 函数 自由切换cout输出到控制台和文件
输入、输出到文件:DOS/Win: freopen("x.txt", "r", stdin); freopen("x.txt", "w", stdout);输入、输出到控制台:freopen函数的句柄,该句柄作用是当不想输入或输出到文件了,要恢复句柄,可以重新打开标准控制台设备文件,这个设备文件的名字是与操作系统相关:DOS/Win: freopen("CON", "r", stdin); freopen("CON", "w", st...原创 2021-03-08 11:22:03 · 693 阅读 · 0 评论 -
关联容器map的一些特点
key值不一样时可以正常存储。并且赋值运算符左右是同步的,std::map::size() 和 constant[j] 二者可以同步感受到键值j的加入。当key值一样的时候,录入失败。原创 2021-03-07 08:01:33 · 101 阅读 · 0 评论 -
C++ STL中Map的按Key排序和按Value排序
C++ STL中Map的按Key排序和按Value排序原文http://blog.csdn.net/iicy266/article/details/11906189map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value。假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区分),我们用map来进行存储就是个不错的选择。 我们这样定义,map<string, int>,其中学生姓名用string类型,作为Key;...转载 2021-03-06 19:10:07 · 954 阅读 · 0 评论 -
vector vs map
对于vector这样的顺序容器,元素在其中按照顺序存储,每个元素有唯一对应的位置编号,所有操作都是按编号(位置)进行的。例如,获取元素(头,尾,用下标获取任意位置),插入删除元素(头,尾,任意位置),遍历元素(按元素位置顺序逐一访问)。底层的数据结构是数组,链表,简单但已能保证上述操作的高效。而对于依赖值的元素访问,例如查找(搜索)给定值(find),在这种数据结构上的实现是要通过遍历完成,效率不佳。 而map这种关联容器,就是为了高效实现“按值访问元素”, 这类操作而设计的。为了达到这一目的,容...转载 2021-03-06 16:58:20 · 222 阅读 · 0 评论 -
C++ vector 容器浅析
C++ vector 容器浅析分类编程技术一、什么是vector?向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。二、容器特性1.顺序序列顺序容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素。2.动态数组支持对序列中的任意元素进行快速直接访问,甚至可以通过指针算述进行该操作。操供了在序列末尾相对快.转载 2021-03-06 16:53:53 · 112 阅读 · 0 评论 -
再谈——函数内无处不在的“栈”(程序语句在内存中是以栈的形式存储的)
#include<stdio.h>#include<string.h>#include<iostream>using namespace std;int main(){ int n[10]={1,2,3,4,5,6,7,8,9,10}; int i=0; while(i<=9) { printf("%d %d\n",n[i++],n[i++]); }}原创 2021-01-27 18:39:03 · 108 阅读 · 0 评论 -
c/c++中二维数组在内存中的存储
#include<stdio.h>#include<string.h>int main(){ int num[10][10]; for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { printf("%x ",&num[i][j]); } printf("\n"); } for...原创 2021-01-25 19:00:34 · 1087 阅读 · 0 评论 -
malloc 挑战 栈的存储方式
第一次运行第二次运行第三次运行结论:void* 类型变量的地址不符合栈的存储方式。修改指针类型后第一次运行第二次运行仍然不符合栈的存储方式原创 2021-01-24 11:51:42 · 120 阅读 · 0 评论 -
const 的作用
原创 2021-01-24 11:03:34 · 129 阅读 · 0 评论 -
static相关的一些编程心得
1. 使用static声明变量 :避免栈中数组越界导致不可预知错误#include<stdio.h>#include<string.h>#include<iostream>using namespace std;int main(){ static int queue[100]; static int a[10]; static int b[10]; memset(queue,0,sizeof(queue)); ...原创 2021-01-23 23:22:03 · 153 阅读 · 0 评论 -
codeblocks修改背景颜色
复制以下代码到default.conf替换掉C:\Users\yourusername\AppData\Roaming\CodeBlocks目下下的default.confSettings>Editor>Syntax Highlighting在colour theme中选择自己喜欢的,比如:<?xml version="1.0" encoding="UTF-8" standalone="yes"?><CodeBlocksConfig version="1".原创 2021-01-13 11:15:41 · 3335 阅读 · 2 评论 -
new关键字来创建c++中一维二维三维的动态数组及其相应的删除方法
一、C++创建一维数组type *p = new type [N] type是指具体的数据类型, N代表的是一维数组的列数 每次使用new后都要释放 delete[] p1; 二、C++创建二维数组 一般的格式:type (*p)[N] = new type [][N] type是指具体的数据类型, N代表的是二维数组的列数另一种格式:不需要写列数当然在每次使用完动态数组后,需要将其释放#include<iostream>#include<s原创 2021-01-01 21:49:15 · 642 阅读 · 0 评论 -
关于算法_c_c++_程序设计等问题尽可以留言,看到了会解答
我会将留言问题的解决方案更新在面板上面。eg:问题一 : xxx答:。。。原创 2020-12-17 10:44:31 · 128 阅读 · 3 评论 -
c++ 枚举类型和强枚举类型
枚举类型 1)缺点:被解释为整型数据(整数) 2)优点 可以防止被修改强枚举类型 1)优点:枚举值不会自动转换为整数原创 2020-09-25 17:48:03 · 203 阅读 · 0 评论 -
c++中float和double类型有效数字的问题
float、double有效数字都只显示6位,超过6位将显示科学计数法。想将小数点后的位数根据自己的控制显示出来,可以cout<<precision(6)<<fixed<<要显示的数值<<endl其中fixed和precision位置可以互换。没有fixed的话,precision只控制有效数字的位数。其中precision在头文件 iomanip中。并且可以发现从当前位置开始,后面所有的数据输出格式全部服从此语句。...原创 2020-09-25 17:13:34 · 1937 阅读 · 0 评论 -
c++ 计算程序运行时间的方法
C++中的计时函数是clock(),而与其相关的数据类型是clock_t(头文件是time.h)。函数原型为:clock_t clock(void); 这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock)。 其中clock_t是用来保存时间的数据类型,在time.h文件中,我们可以找到对它的定义:#ifndef _CLOCK_T_DEFINEDtypedef ...原创 2020-08-23 20:57:00 · 3274 阅读 · 7 评论 -
c++\c 中 getcwd()函数:取得当前的工作目录(working directory)
用 c/c++ 获取当前工作目录的方法:getcwd首先我们来看一下该函数的声明:#include<unistd.h>char* getcwd(char* buffer, size_t size);用法介绍:参数说明:getcwd 方法会将当前工作目录(working directory)的绝对路径复制到参数 buffer 所指的内存空间中,而参数 size 是 buffer 所指的空间大小。第一种用法: 基于上面的解析我们很容易得到第...原创 2020-05-24 10:40:21 · 4108 阅读 · 0 评论 -
C++返回值为对象时复制构造函数不执行怎么办
先说点背景知识,调用拷贝构造函数的三种情况: 1.当用类一个对象去初始化另一个对象时。 2.如果函数形参是类对象。 3.如果函数返回值是类对象,函数执行完成返回调用时。 在辅导学生上机时,有同学第3点提出异议。有教材上的例题为证: #includeusing namespace std;class Coord{publ原创 2017-03-06 11:56:12 · 800 阅读 · 0 评论 -
调用拷贝构造函数的三种情况
1 当用类的一个对象去初始化类的另一个对象时。 如下代码中的 p2(p1), //用对象p1去初始化对象p2,拷贝构造函数被调用(代入法) 还有一种是赋值发 p2=p1;2 当函数的形参是类的对象,调用函数进行形参和实参的结合时。例如void fun1(Rectangle p)//形参是类Rectangle的对象p{ p.disp();原创 2017-03-06 12:28:01 · 6344 阅读 · 0 评论 -
浅谈对象内存分配问题
堆,又叫自由存储区,它是在程序执行的过程中动态分配的,所以它最大的特性就是动态性。在C++中,所有堆对象的创建和销毁都要由程序员负责,所以,如果处理不好,就会发生内存问题。如果分配了堆对象,却忘记了释放,就会产生内存泄漏;而如果已释放了对象,却没有将相应的指针置为NULL,该指针就是所谓的“悬挂指针”,再度使用此指针时,就会出现非法访问,严重时就导致程序崩溃。 那么,C++中原创 2017-03-06 17:58:40 · 228 阅读 · 0 评论