C++details
文章平均质量分 56
无缘浪子党
愿你出走半生,归来仍是少年
展开
-
assert的用法
assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include void assert( int expression );assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。请看下面的程序清单badptr.c:#i转载 2013-11-28 20:55:27 · 568 阅读 · 0 评论 -
STL中vector的内存分配与释放
1.vector的内存增长vector其中一个特点:内存空间只会增长,不会减小,援引C++ Primer:为了支持快速的随机访问,vector容器的元素以连续方式存放,每一个元素都紧挨着前一个元素存储。设想一下,当vector添加一个元素时,为了满足连续存放这个特性,都需要重新分配空间、拷贝元素、撤销旧空间,这样性能难以接受。因此STL实现者在对vector进行内存分配时,其实际分配的容量转载 2014-09-08 10:16:58 · 555 阅读 · 0 评论 -
extern const int
1. 具体问题场景:需要在A.cpp中定义一个const常量,并在B.cpp中引用这个常量,出错的场景:// A.cppconst int NUM = 100;// B.cppextern const int NUM;// 编译错误,错误提示外部符号NUM无法解析,未定义。2. 出错原因:const原创 2014-01-14 15:53:37 · 799 阅读 · 0 评论 -
STL入门导论[原+译]
STL主要有以下六个大的部分:l 迭代器(iterators)迭代器可以理解为一个模板指针;迭代器技术能够使程序反复的对STL容器的内容进行访问;l 算法(alogrithms)STL提供了很多的数据结构算法,这些算法在std命名空间中定义,通过#include来获得使用权。如常用的算法有:for_each()、find()、find_if()、count()、转载 2013-12-27 14:33:21 · 477 阅读 · 0 评论 -
argc argv
main(int argc,char *argv[ ])argv为指针的指针argc为整数char **argv or: char *argv[] or: char argv[][]main()括号内是固定的写法。下面给出一个例子来理解这两个参数的用法:假设程序的名称为prog,当只输入prog,则由操作系统传来的参数为:argc=1原创 2013-12-26 14:11:14 · 638 阅读 · 0 评论 -
string中empty
1、string s = ""; 与 string s = string.Empty;的区别:当你只定义一个str而不为其分配内存时用string str=null,但是在接下来你使用它之前必须为它赋值如str=“xxxx”也就是为它初始化,不然程序运行时可能会引发空指针异常而string str= string。Empty是定义和初始化放在一起它实际是等价于string str=nu原创 2013-11-29 20:36:43 · 984 阅读 · 0 评论 -
try catch throw异常处理
1、bitset类提供to_ulong操作,如果bitset提供的位数大于unsigned long的长度,则抛出一个overflow_error异常。书写一个程序能捕获这种异常并输出提示信息。#include #include using namespace std;int main(){ bitset bs; for (size_t ix=0;ix!=bs.size();ix+原创 2013-11-29 20:58:17 · 820 阅读 · 0 评论 -
线程锁和EnterCriticalSection、LeaveCriticalSection用法
线程锁的概念函数EnterCriticalSection和LeaveCriticalSection的用法注:使用结构CRITICAL_SECTION 需加入头文件#include “afxmt.h”定义一个全局的锁 CRITICAL_SECTION的实例和一个静态全局变量CRITICAL_SECTION cs;//可以理解为锁定一个资源static int n_Ad转载 2013-11-28 17:17:37 · 791 阅读 · 0 评论 -
类静态成员和类静态成员函数
当将类的某个数据成员声明为static时,该静态数据成员只能被定义一次,而且要被同类的所有对象共享。各个对象都拥有类中每一个普通数据成员的副本,但静态数据成员只有一个实例存在,与定义了多少类对象无关。静态方法就是与该类相关的,是类的一种行为,而不是与该类的实例对象相关。 静态数据成员的用途之一是统计有多少个对象实际存在。 静态数据成员不能在类中初始化,实际上类定义只是在描述对象转载 2013-11-28 19:21:43 · 550 阅读 · 0 评论 -
静态数据成员和静态成员函数
类中的静态成员真是个让人爱恨交加的特性。我决定好好总结一下静态类成员的知识点,以便自己在以后面试中,在此类问题上不在被动。 静态类成员包括静态数据成员和静态函数成员两部分。 一 静态数据成员: 类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。和其他数据成员一样,静态数据成员也遵守public/protected/private访问规则。同时转载 2013-11-28 19:34:20 · 507 阅读 · 0 评论 -
动态链接库与静态链接库
静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了。但是若使用 DLL,该 DLL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与 EXE 独立的 DLL 文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可转载 2013-11-28 21:19:56 · 426 阅读 · 0 评论 -
堆内存和栈内存
堆:顺序随意 栈:先进后出 堆和栈的区别 一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式转载 2013-11-28 17:06:09 · 503 阅读 · 0 评论 -
mutable_C++关键字
关键字 mutable 是一个奇怪的修饰符(specifier),它只能够用于一个类的非静态数据成员。下面我将讨论 mutable 的语义和用法,但是首先我要解释一下 C++ 对象模型的一个关键概念。对象的状态 一个对象的状态由其非静态数据成员的值构成,因此,修改一个数据成员将会改变整个对象的状态。将一个成员函数声明为 const 能够保证它不会改变对象的状态。 然而在一些转载 2013-11-28 20:22:09 · 445 阅读 · 0 评论 -
DLL的显示调用和隐式调用
建立项目,请选择Win32 控制台项目(Win32 Console Application),,选择DLL和空项目选项。DLLs可能并不如你想像的那样难。首先写你的头文件(header file);称为DLLTutorial.h。这个文件与其它头文件一样,其中只是一些函数的原型。[cpp] view plaincopyprint?#ifndef _DLL_TUTORIA转载 2013-11-28 21:18:38 · 1481 阅读 · 0 评论 -
getline、gets、getchar例子
1、getline:输入#include #include #include using namespace std;int main(){vector strvec;string stringtemp;getline(cin,stringtemp);while (stringtemp!=" "){strvec.push_back(stringt原创 2014-09-02 14:08:46 · 806 阅读 · 0 评论