C++杂谈
文章平均质量分 81
介绍c++编程出现的问题的解决方案、C++STL、新C++11标准等相关内容。
畅游知识海洋
研究ffmpeg、H264和H265相关工作,从事安防工作,并在计算机视觉方面有一定的研究。
展开
-
operator操作符
111原创 2020-03-25 09:27:56 · 293 阅读 · 0 评论 -
STL 去除多余的容量
虽然stl容器可以动态分配空间,尤其是顺序容器。但是很多情况下,为了避免对内存的多次分配,将会预先给容器分配很大的内存空间,等数据分配完成后,再进行去除多余的空间,这种方式可以有效提供程序的效率。这里采用下面的做法,可以从容器中去除多余的向量:vector<Constestant>(constestants).swap(constestants);代码如下:#include<iostream>#i原创 2017-10-30 17:42:02 · 505 阅读 · 0 评论 -
避免使用vector<bool>
vector作为容器,有以下两点不对:1)它不是stl容器 2)它并不存储bool 如果c是包含对象T的容器,而且c支持operate[],那么下面的代码必须能够被编译:T *p= &c[0]因此,vector是一个容器,那么下面的这段代码必须可以被编译:vector<bool> v;bool *pb=&v[0]; //变量地址初始化一个bool*变量结果,上述表达式并不能编译,原因是vecto原创 2017-11-01 20:29:02 · 613 阅读 · 0 评论 -
STL 理解相等和等价的区别
在STL中,比较两个数是否相等,这样的操作很常见。例如:通过find函数在某个区间寻找第一个等于某个值的元素时,find能够比较两个对象是否相等,与之相似的还有set容器的插入操作,判断插入的键值是否与set中存在的值相等。 在实际操作中,相等的概念基于operator==,但是有一点必须要知道,x==y为真时,并不代表他们所有的数据成员都有相等的值。例如:class widge { publi原创 2017-11-02 15:10:02 · 1534 阅读 · 0 评论 -
C++ STL list
list作为C++STL顺序容器,担任着重要的决策。它的插入和删除的时间复杂度为O(1),底层采用双向链表的结构。不多说了,直接上代码:#include <iostream>#include <list>#include <numeric>#include <algorithm>using namespace std;//创建一个list容器的实例LISTINTtypedef list<原创 2017-10-16 15:38:46 · 283 阅读 · 0 评论 -
C/C++中输入带空格的字符串用法总结
在C/C++中,传统的输入流scanf(“%s”,&str) 和cin>>str,遇到空格会返回空格之前的字符串。但是在很多应用中,我们需要字符串中可以同时包含空格,那么前面的两种方法现在就不可用了,在C/C++中给我们提供了那些输入流处理方式呢。下面是我总结的几种常用的方法:(1)gets(char *str) 需要包含头文件#include <stdio.h>(2)scanf("%[^\n]转载 2017-10-19 10:01:34 · 1833 阅读 · 0 评论 -
c++读入文本所有内容
如何用c++将文本所有内容全部读入呢?可以使用getline函数,进行逐行读入。直接上程序:#include <iostream> #include <fstream> #include <string> using namespace std;int main(){ char *filePath = "E:\\test.txt"; ifstream file;原创 2017-10-22 13:44:28 · 818 阅读 · 0 评论 -
STL 慎重选择删除元素的方法
假设你有一个容器,Containerc,针对连续内存容器(vector、deque或string),那么最好用erase-remove的习惯用法:c.erase(remove(c.begin(),c.end(),4),c.end());对于list,可以采用如下方式:c.remove(4);当c为标准关联容器时,例如set,multiset,map或multimap时,使用任何名为remove的操作原创 2017-10-27 14:25:53 · 770 阅读 · 0 评论 -
如何让程序优雅的崩溃
虽然是大公司的产品,QQ它还是会在我们的折腾下崩溃的,但是它总是崩溃的很优雅,还要弹出自己的对话框来结束。并且发送报告,去掉了系统默认的发送报告的对话框。所以一拍脑袋,想让自己的程序崩溃的体面一点。自己想了大概的思路,觉得可以用一个进程来监控目标程序。的确也可以拿到了目标程序崩溃的信息,知道它什么时候崩溃的,也可以做额外的操作,但是这样是没办法把默认的发送错误的对话框去掉的。然后又有人说是不是采用了转载 2017-08-28 09:30:27 · 1232 阅读 · 0 评论 -
vs2015无法解析外部符号__imp__fprintf 以及imp_iob_func错误
使用vs2015编译ffmpeg的一个程序时,出现了__imp__fprintf和__imp____iob_func 的错误,以下是官方的回答: In visual studio 2015, stdin, stderr, stdout are defined as follow : #define stdin (__acrt_iob_func(0)) #define stdout (__acr原创 2017-08-02 15:23:21 · 7658 阅读 · 2 评论 -
Linux 使用gdb对c/c++代码进行调试
c/c++开发的工作者常常需要考虑跨平台使用的问题,那么在linux上编译是必不可少的一部分。gdb是linux下的c/c++调试工具,具体安装(这里用的是centos的系统,其它系统也大同小异):yum install gdb我们来一段c++代码,命名为test.cpp:#include<iostream>using namespace std;int main(){int a=0;int原创 2017-09-13 20:04:41 · 639 阅读 · 0 评论 -
VS项目引用的使用
程序调用到其他二进制文件(如 DLL、Windows 运行时组件、扩展 SDK、COM 组件和 .NET 程序集)中的 API 的情况非常普遍。 程序找到其他此类库的方式取决于项目的类型,以及二进制文件的类型。在本机 C++ 项目中,如果你正在使用并非由解决方案中其他项目生成的本机 DLL 或 COM 组件,你将使用 LoadLibrary 或 CoCreateInstance 来指定指向二进制文件原创 2017-09-15 18:19:30 · 5586 阅读 · 0 评论 -
C++11多线程编程
1. 基本的多线程实现#include<iostream>#include<thread>#include<string>using namespace std;class Factor {public: void operator()(string &msg) { cout << "from t1:" << msg << endl;原创 2017-08-15 14:50:12 · 393 阅读 · 0 评论 -
C++字符串陷阱
通常,我们会这样定义字符串并初始化:char *str="string";这样定义虽然能够快速的获取字符串元素值,但是这些字符串是存储在文字常量表中,不能被修改。如果使用指针修改值,将会抛出异常。下面上一段程序:char* Strsep(char** stringp, const char* delim){ char *begin, *end; begin = *stringp;原创 2017-08-24 12:51:46 · 326 阅读 · 0 评论 -
C/C++结构体初始化
针对C/C++中定义的结构体,如何初始化其实是一门很深的学问,很多项目的bug是由结构体初始化造成的。struct A { int a; int b[2]; char *c; string d;}A1不如上面的结构体,如何针对这四个不同类型的变量进行初始化?1.最直接的方式struct A a={1,{1,2},NULL,""};2.利用指针A *st=new A();st->原创 2017-09-19 20:01:55 · 1136 阅读 · 0 评论 -
C++字符串分割
字符串切割的使用频率还是挺高的,string本身没有提供切割的方法,但可以使用stl提供的封装进行实现或者通过c函数strtok()函数实现。1、通过stl实现涉及到string类的两个函数find和substr: 1、find函数 原型:size_t find ( const string& str, size_t pos = 0 ) const; 功能:查找子字符串第一次出现的位置。转载 2017-10-10 16:24:53 · 293 阅读 · 0 评论 -
C++ STL入门篇
STL中有迭代器、算法和函数对象,但是对于大多数c++程序员来说,最值得注意的还是容器。容器比数组功能更加强大、更加灵活。他们可以动态增长(缩减),可以管理自己的内存,总之非常方便我们解决很多问题。下面介绍c++提供的STL封装:1.标准STL序列容器:vector,string,deque和list。 2.标准STL关联容器:set, multiset, map和multimap。 3.非标准原创 2017-10-10 15:00:52 · 397 阅读 · 0 评论 -
C++中的list容器如何插入和删除第i个元素
使用C++中的list容器,假设定义了一个list nlist(30);和迭代器list::iterator pnlist = nlist.begin(); 现在我想删除nlist中的第i个元素如何删除?我写的是nlist.erase(pnlisr+i);但是报错,原因是一个整型的i不能跟nlist直接相加。请问如何才能解决了这个问题?list<int>::iterator pnlist = nli原创 2017-10-11 16:30:29 · 6426 阅读 · 3 评论 -
c++11新容器 tuple
tuple顾名思义是元组的意思,提起元组应该并不陌生,很受欢迎的python就有元组的概念,大家感兴趣可以去看看,这里主要介绍tuple的结构和常用使用方法。首先来看官方给出元组的说明:元组(tuple)由预先确定数量的多种对象组成.元组可以看作是struct数据成员的泛化.TR1 tuple类型的C++11版本获益于像可变参数模板这样的C++11语言特性.TR1版本的元组需要一个由实现定义的包含的原创 2017-10-12 10:46:15 · 457 阅读 · 0 评论 -
C++11标准 正则表达式
1.介绍 新的标准库定义了一个新的头文件<regex>,由一些新的类组成: 1.正则表达式由模板类std::regex的实例来表示; 2.模式匹配由的结果模板类std::match_results的实例来表示; 3.函数 regex_search 是用来搜索模式的; 若要搜索并替换,则要使用函数 regex_replace,该函数会返回一个新的字符串。算法regex_search 和 reg原创 2017-10-12 12:00:08 · 1378 阅读 · 0 评论 -
正则表达式-字符串分割
C++不像java那样,有自己的字符串分割函数,那么我们在实际应用中如何快速对某些规定格式的字符创进行分割,并提取内容呢? 下面来看代码: 针对IP地址,如何分割:10:22:192:34/17 //子表达式匹配 regex reg2("(\\d{1,3}):(\\d{1,3}):(\\d{1,3}):(\\d{1,3})/(\\d{1,3})"); vector<stri原创 2017-10-12 14:29:27 · 3335 阅读 · 0 评论 -
C++11 通用智能指针
记录下,C++11标准下的通用智能指针,请注意shared_ptr是类,并不是真正的指正,具体用法如下所示:#include <iostream>#include <string>#include<memory>using namespace std;int main() { std::shared_ptr<double> p_first(new double); {原创 2017-10-12 16:16:02 · 390 阅读 · 0 评论 -
学习c++50条建议
1.把C++当成一门新的语言学习;2.看《Thinking In C++》,不要看《C++变成死相》;3.看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因为他们很难而我们自己是初学者所以就不看;4.不要被VC、BCB、BC、MC、TC等词汇所迷惑——他们都是集成开发环境,而我们要学的是一门语言;5.不要放过任何一个看上转载 2017-10-12 17:33:59 · 245 阅读 · 0 评论 -
C++ STL set和multiset
1.概念 set的含义是集合,它是一个有序的容器,里面的元素都是排序好的,支持插入,删除,查找等操作,就 像一个集合一样。所有的操作的都是严格在logn时间之内完成,效率非常高。 set和multiset的区别是:set插入的元素不能相同,但是multiset插入的元素可以相同。std::set<int> s;s对象里面存贮的元素是从小到大排序的。(因为默认用std::less作为比较工具,这原创 2017-10-13 11:03:53 · 320 阅读 · 0 评论 -
c++ STL map解析
map是用来存放#include <map> #include <string> #include <iostream> using namespace std;struct CmpByKeyLength { bool operator()(const int& k1, const int& k2) { return k1 > k2; }};class原创 2017-10-13 17:12:19 · 350 阅读 · 0 评论