C++
marcryu
这个作者很懒,什么都没留下…
展开
-
数组作为函数参数
通过引用传递数组和其他类型一样,数组形参可以声明为数组的引用。如果形参是数组的引用, 编译器不会将数组实参转化为指针,而是传递数组的引用本身。在这种情况下,数组的大小成为形参和实参类型的一部分。编译器检查数组实参的大小与形参的大小是否匹配:void printValues(int (&arr)[10]);void printfValues(int (&arr)[3][10]);原创 2012-04-26 15:49:34 · 307 阅读 · 0 评论 -
仿函数
#include #include #include #include using namespace std;class Cmp{public: bool operator()(int a,int b)const{ return a > b; }};int main(){ int a[]原创 2013-01-10 16:02:12 · 385 阅读 · 0 评论 -
数组名与指针,一个有意思的区别
int getSize(int data[]){ return sizeof(data);}int main(){ int data[] = {1, 2, 3, 4, 5}; cout<<sizeof(data)<<" "; int*data; cout<<sizeof(data)<<" "; cout<<getSize(data)<<end原创 2013-02-25 15:40:46 · 316 阅读 · 0 评论 -
C++中struct与class的区别
一、 C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能。 struct能包含成员函数吗? 能! struct能继承吗? 能!! struct能实现多态吗? 能!!! 最本质的一个区别就是默认的访问控制,体现在两个方转载 2013-03-08 16:21:02 · 488 阅读 · 0 评论 -
使用STL map 时遇到的两个问题
(1) 重载map的comparemap的定义为map昨天想重载Compare, 使得在一个以pair作为key的map中, 与能被认为是相同的key。 函数在逻辑上很容易实现,但是程序一直编译不过。后来参照网上的资料,发现了几个问题:#include #include using namespace std;class compare{public:原创 2013-03-12 15:18:23 · 937 阅读 · 0 评论 -
STL map: [] 还是find
在map中操作元素时,我习惯与使用[],例如:map m;m[1] = 1;m[1]++;但是,今天在研究STL源码时,发现这样可能会影响效率。T& operator[](const key_type& k){return (*((insert(value_type(k, T()))).first)).second;}也就是说operator[]是调原创 2013-03-12 15:36:29 · 755 阅读 · 0 评论 -
const相关
const int nValue; //nValue是constconst char *pContent; //*pContent是const, pContent可变const char* const pContent; //pContent和*pContent都是const2)const在后面,与上面的声明对等int const nValue; //nValue是转载 2013-04-04 19:40:40 · 473 阅读 · 0 评论 -
动态数组与普通数组在内存分配上的区别
//// main.cpp// test//// Created by Cong on 13-3-24.// Copyright (c) 2013年 liuchyin. All rights reserved.//#include #include using namespace std;int main(){ //int **matrix = new原创 2013-04-15 11:42:18 · 798 阅读 · 0 评论 -
线程的三种同步机制
线程的三种同步机制:互斥:变量名为:pthread_mutex_t初始化与销毁:如果是静态分配的互斥量,可以设置为常量 PTHREAD_MUTEX_INITIALIZER如果是动态分配的互斥量,则在销毁内存之前要调用pthread_mutex_destroyint pthread_mutex_init(pthread_mutex_t *, NULL);原创 2013-04-17 12:18:33 · 782 阅读 · 0 评论 -
类继承中的重载问题
exceptional C++ 上看来的。#include #include using namespace std;class base{public: void f(int){ cout<<"f(int)"<<endl; } void f(double){ cout<<"f(double)"<<endl; }};原创 2013-05-17 20:25:09 · 650 阅读 · 0 评论 -
vs2010中添加lua
VS2010取消了08之前在options里面添加第三方库目录的设置,新的设置方法如下:View->Property Manager, 在Property Manager框里面有Debug|Win32和Release|Win32选项,打开任意一个Microsoft.Cpp.Win32.user会弹出Microsoft.Cpp.Win32.user Property Page转载 2013-08-17 21:01:53 · 3466 阅读 · 0 评论 -
使用STL进行文件输入
今天在读电子版的effective STL,无奈正版没有中文的,所以只能看网友翻译的版本。在第六条中,学到了用STL做文件输入,真是太方便了。#include #include #include #include using namespace std;int main(){ ifstream dataFile("input.txt"); if(!dat原创 2012-10-31 22:19:33 · 819 阅读 · 0 评论 -
C++中数组的初始化
今天在改大一学生的C++作业时,有个学生这么给数组初始化:array[8] = {0};直觉上觉得这样不对,因为C++里不允许用这种形式给所有的元素赋值。但是试了一下,的确是给所有的数组元素初始化为0了。于是回忆了一下数组初始化的规定。在C++中,利用花括号给数组初始化,如果花括号中给的初始值的个数不够,则会自动将未给出初始值的元素赋0。因此这样的赋值在结果上对的。例如array[原创 2012-10-30 19:59:30 · 16531 阅读 · 3 评论 -
googletest初探(一) 源码中的例子
GTEST前言最近打算在项目中使用gtest来做一些移动端接口自动化的测试,在网上查了一些资料,发现最详细的是玩转Google开源C++单元测试框架Google Test系列,除此外基本上没有介绍在移动端应用的。于是决定把自己学习的过程记录下来。安装从github上下载源码,不再多说链接。 我们先在windows上学习一下gtest的运行。 1. 打开googletest/msvc,使用visu原创 2017-03-26 21:22:45 · 439 阅读 · 0 评论 -
函数的参数默认值
#include using namespace std;int a(int p1 = 0, int p2 = 0){ cout<<p1<<" "<<p2;}int a(int p1 = 0){ cout<<p1<<endl;}int main(){ a(1); return 0;}虽然一直没用过默认参数值的功能,今天突然原创 2012-11-19 22:36:12 · 496 阅读 · 0 评论 -
vector中resize与reserve的区别
vector 的reserve只是增加了vector的capacity,但是size没有改变!resize同时改变了vector的capacity和size!reserve是容器预留空间,但并不真正创建元素对象,在创建对象之前,不能引用容器内的元素,因此当加入新的元素时,需要用push_back()/insert()函数。resize是改变容器的大小,并且创建对象,因此,调用这转载 2012-11-03 12:58:37 · 337 阅读 · 0 评论 -
STL中的容器map:不要用指针做键值
我不知道会不会有人跟我犯同样的错误。我只能说,这个bug实在太奇葩了。这两天在跑trace时发现,同样的参数下重复运行,第一次的数据总是跟后面几次有很大出路。一开始觉得是随机数的关系,但心里总有些不安。试着重复运行了10次,果然第一次跟后面9次的数据有明显不同,delivery rate大概有5%的差距。于是我怀疑会不会是结果之间有干涉,例如用来保存结果的数组之间由于编码的问题原创 2012-11-04 20:26:08 · 2529 阅读 · 0 评论 -
const对象不能被引用
例如:class cl{public:inline cl(){}inline cl(int a){this->a = a;}int getA(){return a;}void copy(cl &c2){a = c2.a;}private:int a;};int main(){const int a = 10;原创 2012-04-27 14:10:16 · 629 阅读 · 0 评论 -
基于对象与面向对象【转】
面向对象的三大特点(封装,继承,多态)缺一不可。通常“基于对象”是使用对象,但是无法利用现有的对象模板产生新的对象类型,继而产生新的对象,也就是说“基于对象”没有继承的特点。而“多态”表示为父类类型的子类对象实例,没有了继承的概念也就无从谈论“多态”。现在的很多流行技术都是基于对象的,它们使用一些封装好的对象,调用对象的方法,设置对象的属性。但是它们无法让程序员派生新对象类型。他们只能使用现有转载 2012-04-27 16:46:24 · 329 阅读 · 0 评论 -
关于函数调用中的const参数
有几个需要注意的地方:1.返回引用例如:const string &shorterString(const string &s1, const string &s2){ return s1.size() < s2.size() ? s1 : s2;}形参和返回类型都是指向const对象的引用,调用函数和返回结果时,都没有复制这些string对象。试着运行了一原创 2012-04-23 22:10:07 · 412 阅读 · 0 评论 -
socket
【IP地址转换函数】 点分十进制 整数 inet_pton和inet_ntop这2个函数能够处理ipv4和ipv6。算是比较新的函数了。{ #include #include #include // arpa/inet.h:提供IP地址转换函数}sys/types.h:数据类型定义sys/socket.h:提供so转载 2012-06-01 20:00:08 · 337 阅读 · 0 评论 -
STL学习笔记(二) 会改变操作对象内容的算法
拷贝某个区间copy(InputIterator first, InputIterator last, OutputIterator result)将range1的内容复制到[result, result + (last - first)copy_backward(BidirectionalIterator1 first, BidirectionalIterator1 last, Bi原创 2012-05-19 11:46:54 · 476 阅读 · 0 评论 -
ostream_iterator
无意中看到ostream_iterator这个函数,还是挺有意思的。网上搜了一下,找到一个简单的解释:流迭代器是标准模板库中的。因此是类模板。ostream_iterator指定了类型,就是迭代器读写的类型。通过这个流迭代器可以把你要输入的写入到指定的流中。cout就是指定的流。就是标准输出。可以改成一个输出流就可以,比如一个文件。通俗的一点说,你把它看成一个指向输出流的指针。原创 2012-06-01 20:19:24 · 848 阅读 · 0 评论 -
STL学习笔记(一)不改变操作对象内容的算法
线性查找find(InputIterator first, InputIterator last, const T EqualityComparable& value);找到range中与value值相等的第一个值的iteratorfind_if(InputIterator first, InputIterator last, Predicate pred);找到range中满足p原创 2012-05-06 22:09:27 · 337 阅读 · 0 评论 -
STL学习笔记(三) 堆的操作
今天在写simulator的时候,需要找出M个数中N个最大的数。想起上次和面试官讨论过可以用堆来实现,就查了一下,果然在STL中已经有现成的堆模板。make_heaptemplatevoid make_heap(RandomAccessIterator first, RandomAccessIterator last);templatevoid make_heap(Ra原创 2012-10-05 14:18:49 · 601 阅读 · 0 评论 -
不能被继承的类
看到一道有意思的题目:用C++设计一个不能被继承的类。尝试了一下,需要声明一个私有的默认构造函数,这样这个类就不能被继承。但这个类还需要另外声明带参数的公共的构造函数才能被使用。不知道答案是不是这样。原创 2012-10-14 15:10:50 · 441 阅读 · 0 评论 -
erase-remove删除容器元素
c.erase(remove(c.begin(), c.end(), 1963), c.end());// 当c是vector、string或deque时,erase-remove惯用法是去除特定值的元素的最佳方法remove函数的作用是,将所有等于T的元素(这里是1963)移动到容器的最后,然后返回一个新的end(),同时也是这些被移动的元素的起始位置。然后就可以使用erase函数删除这些元原创 2012-11-01 15:46:02 · 521 阅读 · 0 评论 -
分别在windows和linux上编译cjson为动态链接库,用在loadrunner中解析json
最近的性能测试中,压测的某些接口返回的数据是一个复杂的json格式的字符串,而后续的接口中又需要把这个字符串修改后作为入参,自己处理起来比较麻烦。于是想到了把cjson编译成动态链接库在loadrunner的脚本中调用。另外,由于实际压测用的是部署在linux上的负载机,还需要再编译一个linux上的动态链接库。这样在调试时使用windows平台的dll,而在压测时使用linux平台的so。原创 2017-11-20 22:09:32 · 4471 阅读 · 5 评论