摘要:对数组地址的理解,如 int c[2] = {2,3}; int(*cp)[2] = &c; cout << &c[0] << c << cp << endl;输出都是一样的。。结论:当对数组用&比如&c,那么意思就是“对数组取地址或者取得数组的地址”,而数组的地址返回的就是第一个元素的地址,加上数...
阅读全文
摘要:大家好,这是我在CSDN的第一篇博客。我是一名学习GIS专业的大学生。我从小开始喜欢编程,可是到现在编程水平却长进不大,依然是菜鸟一个。究其原因,虽然这些年乱七八糟的东西学过不少,但是总的来说还是基础不够扎实。所以我从最近一段时间我便买了本C++ Primer Plus正式开始从零学习C++。我现...
阅读全文
摘要:在IDE中,打开View->Other Windows->Property Manager。展开树形后,你会发现一个名为“Microsoft.Cpp.Win32.user”的项目(如下图)。右击并点击“Properties”后,你会看到一个和VC Project properties类似的属性设置框。现在,你应该知道答案了吧。对,就是这里。只要将常用的Include都放入这里就可以达到你要的效果。P.S. 在刚装好VS2010时,发现新建的项目都包含了机器上的STLport 5.1.2。找了一圈目录和文件,重装了好几次还是一样。后来才发现,原来VS2010不知道什么时候,将STLp
阅读全文
摘要:断言的应该是一种编程的常见技巧。我所应用的断言有两种,一种是动态断言,即大家所熟知的C标准库的assert()宏,一种是C++中的静态断言,即在编译期间检查。1)动态断言:assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:[c-sharp]view plaincopy#include<assert.h>voidassert(intexpression);assert的作用是先计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。
阅读全文
摘要:断言是用于检测一个条件的语句,某种程度上就像一个if语句。如果违反条件,它就触发一个错误,让你知道应该在何处修订自己的假设。这是一种帮你减少出错机率的工具,尤其是减少那些与预期不符的错误。•那么,为什么要使用断言,而不使用传统方法(比如if-then-else,switch-case-default或者try-catch)呢?断言是专为调试而设计的,其他方法则主要用于生产。通过断言,可检测自己的逻辑是否正确,而不是通过它来捕捉不可控制的异常。•断言是最快和最有效的调试方式断言与传统代码的比较•If-then-else风格:if (i % 3 != 0) {if (i < 0){Syste
阅读全文
摘要:C++中引用传递与指针传递区别(进一步整理) C++中引用传递与指针传递区别(进一步整理) 中引用传递与指针传递区别从概念上讲。指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独 立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数 据的改变。 而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引 用必须在一开始就被初始化, 而且其引用的对象在其整个生命周期中是不能被改 变的(自始至终只能依附于同一个变量)。 在 C++中,指针和引用经常用于函数的参数传递,然而,指针传递参数和引 用传递参数是有本质上的不同的: 指针传递参数本质上是值传递的方式,它所传递的是
阅读全文
摘要:include <iostream>2 #include <string>3 using namespace std;45 class person6 {7 private:8 int id;9 string name;10 public:11 person(int id, string name):id(id), name(name)12 {13 cout << “invoke con” << endl;14 }15 void show();16 ~person()17 {18 cout << “invoke decon ~” &l
阅读全文
摘要:(1)在实际的程序中,引用主要被用做函数的形式参数--通常将类对象传递给一个函数.引用必须初始化. 但是用对象的地址初始化引用是错误的,我们可以定义一个指针引用.int ival = 1092;int &re = ival; //okint &re2 = &ival; //错误int *pi = &ival;int *&pi2 = pi; //ok(2)一旦引用已经定义,它就不能再指向其他的对象.这就是为什么它要被初始化的原因.(3)const引用可以用不同类型的对象初始化(只要能从一种类型转换到另一种类型即可),也可以是不可寻址的值,如文字常量。例如d
阅读全文
摘要:58二分查找之深入分析C++ limits头文件的用法(numeric_limits)2012-05-13 17:14:07|分类: C / C++ |标签:limits |字号大中小订阅初学C++的时候,对这个模板很陌生,不知道它到底是做什么用的,今天拿起《C++标准程序库》,出现了它的讨论,所以决定好好研究一番。1. numeric_limits是什么?(A)《C++标准程序库》:[cpp]view plaincop一般来说,数值型别的极值是一个与平台相关的特性。C++标准程序库通过templatenumeric_limits提供这些极值,取代传统C语言,所采用的预处理常数。新的极值概念有
阅读全文
摘要:#include<iostream>#include<fstream>#include<string>usingnamespacestd;//输出空行voidOutPutAnEmptyLine(){cout<<"\n";}//读取方式:逐词读取,词之间用空格区分//readdatafromthefile,WordByWord//whenusedinthismanner,we'llgetspace-delimitedbitsoftextfromthefile//butallofthewhitespacethatsepar
阅读全文
摘要:scanf(), getchar()等都是标准输入函数,一般人都会觉得这几个函数非常简单,没什么特殊的。但是有时候却就是因为使用这些函数除了问题,却找不出其中的原因。下面先看一个很简单的程序:程序1: #include <stdio.h> int main() {char ch1, ch2;scanf("%c", &ch1);scanf("%c", &ch2);printf("%d %d/n", ch1, ch2);return 0; } 或者是: #include <stdio.h> int
阅读全文
摘要:a='a',b等待你的输入, cin>>a; cin.putback(a); cin>>b 此时a和b都可以读回来a='a',b='a'。
阅读全文
摘要:const int n_size=127;char user_name[n_size];cout<<"enter your name:"<<endl;cin>>setw(n_size)>>user_name; //setw();将字符串限制在n_size-1中,若n_size为3,这里如果输进uirtt 只会保留ui(还有一个结束字符),最后一个//是字符串结束符 (#include <iomanip>)cout<<user_name;switch (strlen (user_name))
阅读全文
摘要:泛型<编程>:基于策略的basic_string实现泛型<编程>:基于策略的basic_string实现Andrei Alexandrescu这个月的返型<编程>部分有两样新的东西。一样是本篇主题——我们会讨论实现标准库部件basic_string(更多作为 string为人所知,为了方便,string是一个basic_string<char>的typedef),一个C++库的重要部件。但 真正有趣的是本篇供下载的代码为了在Visual C++ 6.0下工作做了特别处理,VC6编译器有两个为人所知的矛盾特性——它被广泛使用和它对泛型编程支持极弱。
阅读全文
摘要:标准库的string类提供了3个成员函数来从一个string得到c类型的字符数组:c_str()、data()、copy(p,n)。1. c_str():生成一个const char*指针,指向以空字符终止的数组。注:①这个数组的数据是临时的,当有一个改变这些数据的成员函数被调用后,其中的数据就会失效。因此要么现用先转换,要么把它的数据复制到用户自己可以管理的内存中。注意。看下例:?const char* c; string s="1234"; c = s.c_str(); cout<<c<<endl; //输出:1234 s="abcd&
阅读全文
摘要:#include <iostream.h> int main() { cout << "hello world---cout" << endl ; cerr << "hello world---cerr" << endl ; clog << "hello world---clog" << endl; return 0; } 在命令行模式下键入下面的命令: test >cout.txt 运行结果是: 在生成的cout.txt文件中输出了"
阅读全文
摘要:C/C++是不检查数组下标是否越界的?奇怪的事情。。。不检查下标是否越界可以有效提高程序运行的效率,因为如果你检查,那么编译器必须在生成的目标代码中加入额外的代码用于程序运行时检测下标是否越界,这就会导致程序的运行速度下降,所以为了程序的运行效率,C/C++才不检查下标是否越界。自己写了一段检测程序测试这个问题,发现如果数组下标越界了,那么它会自动接着那块内存往后写。想了一下明白了,以前说不允许数组下标越界,并不是因为界外没有存储空间,而是因为界外的内容是未知的。也就是说如果界外的空间暂时没有被利用,那么我们可以占用那块内存,但是如果之前界外的内存已经存放了东西,那么我们越界过去就会覆盖那块内
阅读全文
摘要:标准库 <cstdlib> (被包含于 <iostream> 中)提供两个帮助生成伪随机数的函数:函数一:int rand(void);从srand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))间的随机整数。函数二:void srand(unsigned seed);参数seed是rand()的种子,用来初始化rand()的起始值。可以认为rand()在每次被调用的时候,它会查看:1) 如果用户在此之前调用过srand(seed),给seed指定了一个值,那么它会自动调用srand(seed)一次来初始化它的起始值。2) 如
阅读全文
摘要:"\n"表示内容为一个回车符的字符串。std::endl是流操作子,输出的作用和输出"\n"类似,但可能略有区别。std::endl输出一个换行符,并立即刷新缓冲区。例如,std::cout << std::endl;相当于std::cout << '\n' << std::flush;,或者std::cout << '\n'; std::fflush(stdout);。由于流操作符operator<<的重载,对于'\n'和"\n&quo
阅读全文
摘要:比如"testchar" + 1 = "estchar""testchar" + '9' = ""其实这个时候只是char*的指针与后面的值进行相加,看来C++里要时刻注意指针。
阅读全文