
c++
jxhaha
不停的搬砖
展开
-
centos配置vim c++开发环境
好久没从0开始配置vim环境了,今天搞了一下,发现碰到好多问题,整理一下,以便下个环境能继续用。我的操作系统是redhat,centos7.2vim代码自动提示插件YouCompleteMe需要vim8和python3版本,centos7.2自带的vim和python都不符合要求,需要重新安装。环境安装涉及以下几步1、删除旧的vim配置yum remove vim-enhanced vim-common vim-filesystem vim-minimal2、从github上下载安装pyth原创 2020-09-28 19:20:36 · 1336 阅读 · 0 评论 -
C++实时处理不断被写入的文件
最近业务上需要实现一个解析远程终端输出结果的指令,通过ssh将远程服务器终端结果重定向 到本地,再解析终端输出,提取有用的信息做下一步的处理。由于终端会不停的输出,因此重定向的文件也会不断的更新。目前采用的机制是轮训的办法,记录已经读取的文件位置,不断获取当前文件的最新位置并更新读取位置。具体代码如下#include<iostream>#include<fstream>#include<stri原创 2017-11-10 14:37:47 · 4525 阅读 · 0 评论 -
C++ primer 薄片系列之 智能指针
shared_ptr引用次数和交换操作 std::shared_ptr<A> a(new A); std::cout << a.use_count() << std::endl; // 输出 1 std::shared_ptr<A> b; std::cout << b.use_count() << std::endl; // 输出 0 a.swap(b);原创 2017-11-02 14:35:02 · 222 阅读 · 0 评论 -
C++ primer 薄片系列之 STL 容器和迭代器
容器的比较vector:元素保存在连续空间中。可变大小数组,支持快速随机访问,在尾部之外的位置插入或删除可能很慢 list:双向列表,只支持顺序访问。在任何位置插入或删除都很快 forward_list:单项列表,只支持单向顺序访问。在链表任何位置插入或者删除都很快 deque:双端队列,支持快速随机访问,在头尾插入,删除很快 string :元素保存在连续空间中。和vect原创 2017-10-31 17:28:00 · 289 阅读 · 0 评论 -
C++ primer 薄片系列之拷贝控制
拷贝构造函数如果没有为一个类定义拷贝构造函数,编译器会为我们定义一个合成拷贝构造函数。合成的拷贝构造函数会将参数的成员逐个拷贝到正在创建的对象中,编译器从给定的对象中依次将非static成员拷贝到正在创建的对象中。 –类成员调用其拷贝构造函数 –内置类型直接拷贝,虽然数组不能直接拷贝,但是会逐元素的拷贝一个数组类型的成员。如果数组类型是类成员,则使用元素的拷贝构造函数来进行拷贝拷贝初始化的发原创 2017-11-02 17:26:36 · 283 阅读 · 0 评论 -
C++ primer 薄片系列之移动构造
移动构造函数为啥要有移动构造函数, 个人浅见,为避免调用成员的复制构造函数造成额外的开销,毕竟复制指针要来的更方便快捷,因而产生的。比如一个string对象,普通的拷贝赋值或者拷贝构造函数的方式中,我们是在内存空间里创建一个新的string对象,并将原string的char数组一个一个复制到新的string对象。移动构造或者移动赋值的时候,我们先假定原来的string,我们已经不需要用了。但是原来s原创 2017-11-05 11:59:23 · 381 阅读 · 0 评论 -
C++ primer 薄片系列之重载运算符
重载运算符函数也是函数,所以参数数量和该运算符的运算对象数量一样多。当运算符是成员函数时候,它的第一个(左侧)运算对象绑定到隐式的this指针上,所以成员运算符函数的显式参数数量比运算符的运算对象总数少一个。 硬性规定:对于一个运算符函数来说,它或者是类的成员函数,或者至少含有一个类类型的参数。 不能重载的运算符 一、:: 二、.* 三、 . 四、?: 通常情况下,不应该重载逗号,取地址,原创 2017-11-05 21:18:34 · 252 阅读 · 0 评论 -
C++primer 薄片系列之模板
非类型模板参数template<int t1>void test(const int(&p)[t1]) //非类型模板参数{ for(auto i = 0; i < t1; i++) { std::cout << p[i] << " "; } std::cout <<std::endl;}int main(){ int p[10] =原创 2017-11-14 17:19:11 · 253 阅读 · 0 评论 -
C++ 算法系列之动态规划
动态规划,是为了避免递归中出现重复计算的一种策略。核心思想是自底向上的解决问题。因此解决这类问题的关键是,从n=1开始解决,递推到n=N,求得最终值 基本操作分为三步 1. 寻找最优子结构 2. 列出递归方程,自底向上的对每个新产生的子问题仅解一次并将解保存在一个表格,需要时在表中查找. 3. 根据计算出的最优解的值构造相应的最优解example 1有一个高度为10级台阶的楼梯,从下往上走原创 2017-12-09 20:43:55 · 1316 阅读 · 0 评论 -
C++primer 薄片化系列之标准库特殊实施
std::tupletuple 可以将一些数据组合成单一对象.构造函数是explicit 的std::tuple<int,double> s = {1,2.5};//错误std::tuple<int,double> s(1,2.5);//正确访问成员std::tuple<int,double> s(1,2.4);std::get<0>(s);//获取s的第一个元素std::get<1>(s);原创 2017-11-20 17:30:37 · 330 阅读 · 0 评论 -
C++ primer 薄片系列之大型程序的工具
捕获异常class A{public: A() { } ~A() { std::cout << "I am done" << std::endl; }};void test(){ try { A a; throw std::runtime_error("sdss");//捕获异常能原创 2017-11-24 14:43:33 · 367 阅读 · 0 评论 -
C++primer薄片系列之特殊工具与技术
new 和 deleteclass A{public: A() { } ~A() { }};A *s =new A();new 的具体操作过程分三步 1. 调用标准库函数operator new申请足够大的,原始的,未命名的内存空间 2. 编译器运行A的构造函数构造对象,并为其传入初始值 3. 返回构造完成后的对象的指针 delete原创 2017-11-24 17:34:09 · 358 阅读 · 0 评论 -
selec, poll, epoll实践
poll例子#include <iostream>#include <sys/types.h>#include <sys/socket.h>#include <arpa/inet.h>#include <netinet/in.h>#include <string.h>#include <unistd.h&g原创 2018-10-31 19:53:43 · 172 阅读 · 0 评论 -
C++常用的库
opencv.lib-turbojpeg: jpeg sim加速解码imagemagicffmpeggflags:https://github.com/gflags/gflagsglog : https://github.com/google/gloggtest: https://github.com/google/googletestsnappy: https://github.c...原创 2019-06-17 16:41:07 · 408 阅读 · 0 评论 -
c++ stl 一些东西
std::map: 其key是基于比较运算符的,因此自定义类型需要为该类型设定比较运算符操作class A {public: bool operator < (const A & b) { return mm < b.mm; } private: int mm; } std::map<...原创 2019-09-22 21:22:44 · 186 阅读 · 0 评论 -
C++调用外部so文件
利用extern “C” 构建一个外部C库//testlibc.cpp#include<iostream>extern "C" void test(){ std::cout << "this is a test log" << std::endl;}//编译成动态库g++ -std=c++11 testlibc.cpp -shared -fPIC -o libtest.soC 文件原创 2017-11-10 13:20:26 · 11194 阅读 · 0 评论 -
C++ primer 薄片系列之 map 三两事
map 向map中写入一个pair,如果这个pair的关键字已经存在在这个map中,则原map不受写入影响。 std::map<int,int> am1 = {{1,2}}; auto it = am1.insert({1,5}); std::cout << it.first->first << " "<< it.first->second << " " << it.seco原创 2017-11-01 17:23:53 · 259 阅读 · 0 评论 -
C++ split 函数
用惯了java的split 函数,再来写C++的时候,发现C++居然没有split函数,真心忧桑。整了一个样例,当做自己的库函数,以后用的时候,直接copy。void split(const string & str, const string &delim, vector<std::string> &result) { size_t pos2 = 0; size_t pos1 =原创 2017-03-28 16:47:33 · 767 阅读 · 0 评论 -
C++ 遍历文件夹下所有的文件
windows下和linux下遍历目录下所有的文件信息,这里暂时不处理子目录的情况,如需处理子目录里的文件,只需要递归一下就好了。#include<iostream>#include<io.h>#include<vector>#include<assert.h>#include <dirent.h>using namespace std;//linuxvoid getAllFileFr原创 2017-03-29 10:35:58 · 1941 阅读 · 0 评论 -
C++常用排序总结
#include<iostream>#include<stdlib.h>#include<time.h>#include<chrono>#include<string>using namespace std;const int MAX_NUM = 1000;//没有任何基于比较的算法能够保证使用少于log(N!)~NlogN次比较将长度为N的数组排序//选择排序与输入无关,不管输入是原创 2017-04-19 16:52:57 · 355 阅读 · 0 评论 -
C++ 模板类
BST.htemplate<typename T,typename S>class Node{public: Node(T a, S b, int c); ~Node();private: T key; S value; Node* left; Node * right; int N;};template<typename T, ty原创 2017-04-19 22:09:03 · 251 阅读 · 0 评论 -
指针和数组,const int *,sizeof,优先级等的一些坑
const 的一些事情const是修饰符,const 指向的常量并不是真正意义的常量const int a, int const *a,int const a,区别,指针数组,数组指针,声明与定义 1、const int *a a 指向一个常量,因此不能通过*a来改变a所指向的对象值。但是a本身可以被赋值。 const int *a = 0; const int b = 1; in原创 2017-04-25 22:22:58 · 740 阅读 · 0 评论 -
C++ 实现二叉搜索树(BST)
class BST{public: struct Node { int key;//节点的key int value;//节点的value Node* left; Node *right; int N;//节点的叶子节点数目 Node(int _key, int _value, int原创 2017-04-20 11:32:15 · 749 阅读 · 0 评论 -
更快的memcpy
先做个对比#define SMARTCOPY memcpy(destination,source,65536);#define DUMBCOPY for(i=0;i<65536;i++) \ destination[i]=source[i]main(){ char source[65536],destination[65536];原创 2017-05-03 15:52:01 · 440 阅读 · 0 评论 -
闲扯C/C++中的switch
void test(){ int i=10; switch (i){ int k;// case 3: int m;//C 直接编译不过,C++可以通过 int t=11;//C与C++ 均报错.C++应改成int t;t=11; {int k=12;}//C/C++ 均有效原创 2017-04-25 20:27:49 · 331 阅读 · 0 评论 -
C++ 局部变量
先看一个小程序#include<iostream>#include<stdlib.h>#include<cstring>using namespace std;char *test(){ char buffer[20]="1234"; return buffer;}int main(){ cout<<test()<<endl;//什么都没有}局部变量(原创 2017-04-26 15:55:37 · 1708 阅读 · 0 评论 -
C++ 返回指向数组指针的函数
数组不能被拷贝,函数不能返回数组,只能返回数组的指针或者引用。 理由:会造成不必要的开销。因为数组的复制将导致连续的内存读与内存写,其【时间】开销取决于数组长度,有可能会变得非常大。C语言的函数参数传递只有pass by value这一种形式,由于拷贝数组开销巨大,因此C语言使得当数组作为实参传递给函数的时候,将退化为同类型的指针,然后对那个指针pass by value。函数指针: i原创 2017-04-26 23:31:33 · 3762 阅读 · 0 评论 -
把vim打造成C++ IDE
前辈整理的,留作收藏备注 http://blog.youkuaiyun.com/doc_sgl/article/details/47205779转载 2017-06-08 13:27:24 · 279 阅读 · 0 评论 -
Ubuntu解决eclipse CDT 不能识别C++11 shared_ptr 等特性
解决 eclipse CDT 启动 找不到 jre jdk的解决方法: 在eclipse.ini 文件的开头添加 两行:-vm/usr/local/java/jdk-8u131-linux-x64/jre/bin解决C++ 文件中#include<iostream>报错的问题C/C++ General -> Paths and Symbols ->Includes -> Add->Fi原创 2017-06-11 19:06:43 · 2358 阅读 · 0 评论 -
C++11 time相关函数用法
最近有用到时间方面的东西,看了一点C++11 关于时间相关的资料,做了一下小结,以备日后查询 头文件主要在chrono里面#include<std::chrono>using namespace std;using namespace std::chrono;system_clock::now()// 获得当前时间点time_t now=system_clock::to_time_t(sys原创 2017-07-21 09:00:25 · 1296 阅读 · 0 评论 -
std::lock_guard 和 std::unique_lock的区别
大部分情况下,两者的功能是一样的,不过unique_lock 比lock_guard 更灵活. unique_lock提供了lock, unlock, try_lock等接口. lock_guard没有多余的接口,构造函数时拿到锁,析构函数时释放锁 lock_guard 比unique_lock 要省时.class A{public: std::mutex原创 2017-09-15 13:40:41 · 5623 阅读 · 1 评论 -
C++primer薄片系列之OOP
基类中的某些函数,基类希望派生类定义适合自己的版本,这些函数则被声明为虚函数,virtual。动态绑定发生在基类指针(或者引用)调用虚函数的时候。通常基类的析构函数被定义为虚函数,解析过程发生在运行期。如果基类把一个函数声明成虚函数,则函数在派生类中也是虚函数。 调用虚函数时,会调用距离其类最近的实现虚函数的类。class A{public: virtual void test()原创 2017-11-05 21:33:42 · 277 阅读 · 0 评论