linux C/C++
nudt_qxx
这个作者很懒,什么都没留下…
展开
-
使用basename批量删除某文件夹下所有文件的后缀
basename命令用于去掉文件名的目录和后缀(strip directory and suffix from filenames),对应的dirname命令用于截取目录示例一 # 获取到最后文件名sort[root@local ~]# basename /usr/bin/sort sort示例二 # 去除文件名后缀[root@local ~]# basename /usr/include/stdio.h .h stdio[root@local ~]# basen原创 2022-03-14 21:27:56 · 1021 阅读 · 0 评论 -
Ubuntu 22.04换国内源 清华源 阿里源 中科大源 163源
Ubuntu 22.04 的稳定版计划于 2022 年 4 月 21 日发布。开发工作已经在紧锣密鼓地进行,它将遵循如下发布时间表:2022 年 2 月 24 日:功能冻结2022 年 3 月 17 日:用户界面冻结2022 年 3 月 31 日:测试版发布2022 年 4 月 14 日:候选版本2022 年 4 月 21 日:最终稳定版本Ubuntu 22.04 仍在积极开发中。您不应该在生产机器或主系统上使用它。如果你想在备用机器或虚拟机上测试它,你可以从 Ubuntu 的网站下载每日原创 2022-02-10 11:14:04 · 154475 阅读 · 12 评论 -
在线运行C++的网站整理(持续更新)
1.https://godbolt.org/2.https://wandbox.org/原创 2022-01-05 10:01:52 · 8359 阅读 · 0 评论 -
从C++11到C++23(六)C++20利用contains查询map是否存在某个键
在C++20以前,如果map查询是否存在某个键,需要语法为1.使用map::find:if ( m.find(key) != m.end() ) { std::cout << "Found\n";} else { std::cout << "Not found\n";}2.使用count函数,使用下面三条任意一条判断语句即可:m.count(key) > 0m.count(key) == 1m.count(key) != 0区别:map和set两原创 2021-08-11 10:13:40 · 7961 阅读 · 0 评论 -
从C++11到C++23(五)C++20新增starts_with和ends_with用法
不得不说,C++20真是越来越接近Python语法。在Python中有两个函数分别是startswith()函数与endswith()函数,功能都十分相似,startswith()函数判断文本是否以某个或某几个字符开始,endswith()函数判断文本是否以某个或某几个字符结束。例如>>> s = "hello world">>> s.startswith("h")True>>> s.startswith("he")True>>原创 2021-08-10 20:13:29 · 4060 阅读 · 3 评论 -
从C++11到C++23(四)统计某个数目中1的个数
代码链接见:https://wandbox.org/permlink/sIdpRyLe4utkecEqC++20提供了一个新的 <bit> 头文件用于提供一些位运算,其中popcount可用于统计一个数目中1的个数。如果你想统计一个2/8/16进制数目中1的个数,这个函数就非常方便了:#include <bit>#include <bitset>#include <cstdint>#include <initializer_list>原创 2020-06-30 23:13:10 · 794 阅读 · 0 评论 -
从C++11到C++23(三)常量表达式修饰虚函数constexpr virtual functions
代码链接见:https://wandbox.org/permlink/ksQk5KCf4K5ChUe0constexpr(常量表达式)是为了解决C++历史遗留问题,它一种比const 更严格的束缚, 它规定了表达式本身在编译期间可知。简单来说,const其实是readonly(只读),而constexpr才是const(常量)。二者更多区别见:知乎:C++ const 和 constexpr 的...原创 2020-04-30 10:25:09 · 1149 阅读 · 0 评论 -
从C++11到C++23(一) C++20圆周率、常数e和常见对数
代码连接见:https://wandbox.org/permlink/qaUjQb3Ud0SGqRhpC++20中圆周率和常数e已经进入std了,无需math头文件:// gcc >=10,// g++ test.cpp -Wall -Wextra -std=c++2a#include <iostream>#include <numbers> //加这个头...原创 2020-04-29 14:59:55 · 1811 阅读 · 0 评论 -
从C++11到C++23(二)C++20的for循环
代码链接见:https://wandbox.org/permlink/Ex03u0X4YB8zYfpyC++20的for循环遍历,优雅到爆:#include <iostream>#include <vector>using namespace std;int main(){ for (std::vector v{1, 2, 3}; auto& ...原创 2020-04-29 15:09:17 · 2211 阅读 · 1 评论 -
C++实现常见shell命令cp mv rm mkdir
#include <dirent.h>#include <stdlib.h>#include <string.h>#include <sys/stat.h>#include <sys/time.h>#include <sys/types.h>#include <unistd.h>#include <cstdio>#include <cstdlib>// mkdir 新建文件夹i.原创 2021-04-06 12:26:47 · 820 阅读 · 0 评论 -
C++ vector正确删除元素Erase–remove用法
来源:维基百科动机一个常见的编程任务是从集合collection中删除等于某个值或满足某个标准的所有元素。C++语言可以通过手写循环完成这个任务。但更好的办法是使用C++标准模板库中的算法来实现。erase用于从一个集合中删除一个元素,但是对于基于数组的容器,如vector,存储在被删除元素后的所有元素都需要向前以东以避免集合中有一个空位(gap),在同一容器中多次调用产生了大量移动元素的开销。algorithm库提供了remove与remove_if算法。由于这些算法运行在两个前向迭代器确定的元素转载 2020-12-09 11:14:55 · 8770 阅读 · 1 评论 -
C++ 利用正则表达式按特定字符切割字符串
// This file is a "Hello, world!" in C++ language by GCC for wandbox.#include <iostream>#include <vector>#include <regex>#include <string>std::vector<std::string> split(const std::string& input,原创 2020-10-26 15:19:21 · 3699 阅读 · 0 评论 -
C++11 生成随机数
代码链接:https://wandbox.org/permlink/piWyOPiMyG0tggQKC++11 提供了新的随机数生成方法,随机数的相关类声明都位于<random>头文件中,完整说明可参考:random,此处选择一些常用的总结一下。std::mt19937是C++11加入的新特性,是一种高效的随机数生成算法。它的用法和rand()相似,但是具有速度快,周期长的特点。它的名字就来自于周期长度2^19937-1。而rand()在windows下生成的数据范围为0-32767。而这个原创 2020-09-22 18:08:30 · 1548 阅读 · 1 评论 -
c++ 产生不重复独有文件名
#include <iostream>#include <cstdio>#include <string>int main(){ int pos; std::string fileName; std::string final; for(int i = 0; i < 10; i++) { std::strin...原创 2019-10-24 17:26:30 · 1173 阅读 · 0 评论 -
C++ Boost Thread和Rust Thread对比
C++11新加入的std::thread是由boost::thread发展而来,二者用法极其相似,基本上就是改一下头文件和名称空间的问题,例外是thread_group,thread_group,它们都是boost的组件,但并不是标准库的组件,所以需要自己实现一下。还有boost中的thread_group使用shared_mutex来进行线程同步,shared_mutex也没有进入标准库,所以需要原创 2017-09-09 13:41:42 · 1357 阅读 · 0 评论 -
Ubuntu下Clion开启dlib支持
环境Ubuntu 14.04 + Clion 2017.03安装wget https://github.com/davisking/dlib/archive/v19.9.tar.gztar -xzvf v19.9.tar.gzcd dlib-19.9mkdir buildcd buildcmake .. makemake installldco...原创 2018-01-29 21:36:45 · 597 阅读 · 0 评论 -
C++批量新建目录
用C++批量新建目录,示例代码如下: #include <stdlib.h> #include <unistd.h> #include <string> #include <sys/types.h> #include <sys/stat.h> #include <string&g...原创 2018-03-14 18:51:18 · 504 阅读 · 0 评论 -
无法链接PCL库undefined reference to `pcl::PCLBase****
环境Ubuntu 14.04 +ROS Indigo +PCL 1.8报错日志../lib/libORB_SLAM2.so: undefined reference to `pcl::PCLBase<pcl::PointXYZRGBA>::setIndices(boost::shared_ptr<std::vector<int, std::allocat...原创 2018-03-11 08:32:55 · 9742 阅读 · 5 评论 -
利用ZeroMQ传输图片
待传输的数据cv::Mat mat订阅端(sub)import cv2import zmqsub_port = 6666context = zmq.Context()#connect to socket we subscribsocket_sub = context.socket(zmq.SUB)socket_sub.connect("tcp://localhost:...原创 2018-03-13 17:11:30 · 3321 阅读 · 0 评论 -
Ubuntu安装GCC5/7/9/10/11
为了使用C++14/17的新特性,我们难免要升级下自己的GCC版本,同时还要保证自己新安装的GCC生效,并且和原GCC共存。安装GCC-5.0sudo add-apt-repository ppa:ubuntu-toolchain-r/testsudo apt-get updatesudo apt-get install gcc-5 g++-5sudo update-alte...原创 2018-03-24 10:31:44 · 20076 阅读 · 4 评论 -
C++链接提示“multiple definition of”重复定义
本文系转载,出处:https://zybuluo.com/uuprince/note/81709。今天移植一个C++代码段,移植完编译时候提示“multiple definition of function”,多个函数提示重复定义。首先给出解决法方案,找到这些“重复定义”的函数所在的头文件,然后在函数定义前加“inline”关键字。...转载 2018-04-03 16:19:55 · 4211 阅读 · 6 评论 -
opencv处理视频流和视频流存为图片序列
//main.cpp #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;string&gt; #include &lt;opencv2/core/core.hpp&gt; #include &lt;opencv2/highgui/highg原创 2018-05-27 08:32:18 · 3452 阅读 · 0 评论 -
opencv 把图片序列转化为视频流
#include <string.h>#include <opencv2/opencv.hpp>#include <opencv2/highgui/highgui.hpp> // Video write#include <sstream>using namespace std;class pubimage{public: ...原创 2018-05-28 10:35:09 · 6364 阅读 · 0 评论 -
最简单的并行计算——OpenMP的使用
简介OpenMP的英文全称是Open Multiprocessing,一种应用程序界面(API,即Application Program Interface),是一种单进程多线程并行的实现和方法,也可以认为是共享存储结构上的一种编程模型,可用于共享内存并行系统的多线程程序设计的一套指导性注释(Compiler Directive)。CPU下进行并行计算,最简单的方式就是使用OpenMP,这原创 2018-01-20 00:25:14 · 19182 阅读 · 0 评论 -
PCL编译提示CMake Error: Boost not Found(common is required but boost was not found)
不得不说ORB-SLAM2依赖库实在是太多了,库和库之间很容易冲突,这不,源码编译安装了boost1.54,然后在编译PCL1.8的时候报错了: CMake Error: Boost not Found(common is required but boost was not found)我搜了不少答案,其实就是解决如何让Cmake找到Boost库的问题。几个不错的有参考性的答案原创 2018-01-10 20:52:12 · 8225 阅读 · 1 评论 -
Linux Bash入门:变量和数学运算
shell基本概念shell既是一种解释型编程语言,也是一个这种编程语言的解释器的名字shell是解释型语言,就是解释器会一条一条的翻译每一条语句并执行,对比之下,C语言是编译型语言,编译器把整个工程编译成可执行文件才能执行在没有续行符(\回车)的情况下,shell脚本的一条语句以”回车”为结束任何一个shell脚本程序都必须在开头用#!标识使用的shell程序,如果用的是bash,那就是#原创 2017-12-08 22:19:14 · 847 阅读 · 0 评论 -
C++ 并发编程之std::thread的基本用法
#include <iostream>#include <thread>using namespace std;void sayHello();void show();void method(int &a)//ref{ a += 5; cout <<a<<endl;}int main(int argc, char const *argv[]) { int a =转载 2017-09-20 09:07:28 · 16067 阅读 · 0 评论 -
Linux下配置RPC框架Apache Thrift
Thrift最初生于Facebook,并茁壮成长,在2007年由Facebook正式开源出来,2008年由Apache软件基金会开始负责项目孵化直至今日。Thrift的全名叫做Apache Thrift,是一款由 Facebook 开发的远程服务调用框架框架,它可以很高效地实现跨语言的RPC服务。github地址:https://github.com/apache/thrift,最新的版本是0.10原创 2017-09-01 13:54:29 · 794 阅读 · 0 评论 -
使用RPC框架Apache Thrift在远程主机运算并返回
新建一个count.thrift文件:# count.thrift#/** * Thrift files can namespace, package, or prefix their output in various * target languages. */namespace cpp freebird/** * Defining a removed class named Wor原创 2017-09-01 16:53:01 · 503 阅读 · 0 评论 -
C++#pragma pack指令
微软官方文档说#pragma pack 指令的作用是为结构、联合和类成员指定 pack 对齐。的主要作用就是改变编译器的内存对齐方式,这个指令在网络报文的处理中有着重要的作用,#pragma pack(n)是他最基本的用法,其作用是改变编译器的对齐方式, 不使用这条指令的情况下,编译器默认采取#pragma pack(8)也就是8字节的默认对齐方式,n值可以取(1, 2, 4, 8, 16) 中任意原创 2017-09-18 23:28:03 · 782 阅读 · 0 评论 -
基于C++11 chrono库的计时器
#include <chrono>#include <iostream>#include <ratio>using namespace std::chrono;using namespace std;int main(){ auto start = steady_clock::now(); for (int i=0;i<100;i++) { cout<<"I lov原创 2017-09-08 20:50:08 · 2531 阅读 · 0 评论 -
Boost Timer 计时器
#include<iostream>#include <boost/timer.hpp>using namespace std;using namespace boost;int main(int argc, char const *argv[]) { timer t; for (int i=0;i<100;i++) { cout<<"I love U"<<endl; }原创 2017-09-08 20:32:05 · 433 阅读 · 0 评论 -
boost 获取当前日期
#include <boost/date_time/gregorian/gregorian.hpp>#include <iostream>using namespace boost::gregorian;using namespace std;int main(int argc, char const *argv[]) { date d(day_clock::local_day());原创 2017-09-08 19:50:56 · 2136 阅读 · 0 评论 -
让C++写起来和Python一样简单的库range-v3
最近看了一篇博文:C++ 17 写法上已经很接近 python 了。这里引出了一个很骚的库:range-v3/。这个库可以让C++更加容易实现filter/mapreduce/sort/iterator等函数。 range-v3需要clang 3.6.2 及以上和GCC 4.9.1及以上的编译器版本支持,毕竟里面好多代码是以C++11/14/17为基础写的。 源码地址:https://githu原创 2017-09-15 18:37:29 · 3469 阅读 · 0 评论 -
C++ clone()函数的用法
本文系转载,出处:设计模式学习笔记(原型模式)原型模式在C++中,要拷贝一个对象,除了自定义一个拷贝构造函数来实现对象复制外,还可以像实现一个clone函数,这需要借助编译器实现的一个隐藏拷贝构造函数,这样的做法,更省心。背后的原理是C++的原型(Prototype)模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。Prototype模式提供了一个通过已存在对象进行新对象创建的接转载 2017-12-13 16:24:41 · 18478 阅读 · 0 评论 -
Cmake编译使用C++11
cmake编译项目需要C++11特性的支持,只需要在CMakeLists.txt中加入:add_definitions(-std=c++11)原创 2017-12-19 09:12:38 · 11650 阅读 · 2 评论 -
Linux下编译安装Boost1.66
依次执行以下命令下载Boost1.66源代码包并编译安装:wget https://nchc.dl.sourceforge.net/project/boost/boost/1.66.0/boost_1_66_0.tar.gztar -xzvf boost_1_66_0.tar.gzcd boost_1_66_0./bootstrap.sh./b2 install --prefix=/usr ldco原创 2017-12-26 20:57:14 · 8303 阅读 · 0 评论 -
linux查看boost版本
dpkg -S /usr/include/boost/version.hpp原创 2018-01-09 15:01:34 · 34214 阅读 · 2 评论 -
clion 提示 No previous CMake output available
一般在用clion写cmake管理的项目后,会自动生成一个cmake-build-debug目录,在这里会生成Makefile文件。不过如果你删了这个文件夹,clion会提示: No previous CMake output available这时想要重新生成该目录和Makefile文件,方法见:https://github.com/stlab/libraries/wiki/Bui原创 2018-01-08 15:27:57 · 1279 阅读 · 0 评论 -
Linux下利用ZeroMQ让C++和Python交互
环境Ubuntu 14.04 + gcc/g++4.8.4 +Python 2.7需求最近在搞一个项目,需要让C++和Python交互,当然这种交互不是在C++中调用Python代码,而是先让C++代码处理一个程序,再把输出用Python代码处理。网上看到有人用socket解决,可本人对socket一向排斥,然后就采用了更强大的分布式RPC框架——ZeroMQ来让二者交互。原创 2018-01-05 13:42:38 · 3617 阅读 · 2 评论