代码改变世界

随笔分类 -  C++

int main() 和int main(void)的区别

2012-05-22 20:01 by youxin, 9062 阅读, 收藏, 编辑
摘要: C89标准的main()函数是可接受的,尽管现在建议是使用C99的标准。C99标准只定义了如下两种可接受的函数原型:int main ( void )int main ( int argc, char *argv[] ) 以上函数原型微小的变形也是可以被接受的,比如int可以被typedef定义为int的名字所代替,argv的类型也可以写成char **argv,等等。第一种函数原型选择适用你不许要访问命令行参数的时候。对于第二种函数原型选择,如果你喜欢的话,标识符argc和argv的名字可以改变,但是坚持使用argc/argv是一个惯例。main()函数的返回值必须是一个int型,返回值给m 阅读全文

c++ find_first_of

2012-05-20 15:33 by youxin, 934 阅读, 收藏, 编辑
摘要: find_first_of 函数原型如下: ForwardIterator1 find_first_of ( ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2 ); 它从第一个范围里面寻找任何一个是第二个范围里的一个元素,返回第一次匹配的迭代器。如果找不到,返回第一个范围的最后一个迭代器。从两个list中输出匹配的次数:#include<iostream>#include<lis... 阅读全文

转:C++中定义类的对象:用new和不用new有何区别?

2012-05-17 20:18 by youxin, 450 阅读, 收藏, 编辑
摘要: 举个简单的例子:class Point { private: int x; int y; public: void Set(int a,int b) { x=a; y=b; } void Print() { cout<<"("<<x<<","<<y<<")"<<endl; }}; void main(){ Point p1; Point *p2=new Point(); p1.Set(1,2); p2->Set(4,5); p1.Print(); p2-&g 阅读全文

C++ static 关键字详解

2012-05-17 19:50 by youxin, 2208 阅读, 收藏, 编辑
摘要: 全局变量和局部变量在内存里的区别?一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结... 阅读全文

c++ const 成员函数和mutable

2012-05-16 14:13 by youxin, 1418 阅读, 收藏, 编辑
摘要: 常量(const)成员函数:承诺不会修改对象的状态double Student_info::grade() const {...} // 成员函数版double grade(const Student_info&) {...} // 旧版 对常量对象只能调用常量成员函数,而不能调用非常量成员函数。... 阅读全文

c++动态创建和销毁二维数组

2012-05-15 23:53 by youxin, 1400 阅读, 收藏, 编辑
摘要: 如果二维数组中的高维确定,则可以TYPE (*p)[N] = new TYPE [][N]; 用这种方法。最常用的方法: 使用数组指针,分配一个指针数组,将其首地址保存在b中,然后再为指针数组的每个元素分配一个数组 int **b=new int*[row];//分配一个指针数组,将其首地址保存在b中 for(i=0;iusing namespace std;void func(int m,int n){ int x; int **p=new int*[m]; for(int i=0;i>x; p[i][j]=rand();... 阅读全文

c++ new和delete

2012-05-15 23:29 by youxin, 317 阅读, 收藏, 编辑
摘要: new和delete运算符用于动态分配和撤销内存的运算符new用法:1.开辟单变量地址空间1)new int; //开辟一个存放数组的存储空间,返回一个指向该存储空间的地址.int *a = new int 即为将一个int类型的地址赋值给整型指针a.2)int *a = new int(5) 作用同上,但是同时将整数赋值为52.开辟数组空间一维: int *a = new int[100];开辟一个大小为100的整型数组空间二维: int **a = new int[5][6]三维及其以上:依此类推.一般用法:new 类型 [初值]delete用法:1. int *a = new int;d 阅读全文

C++ iterator const_iterator 与 const iterator

2012-05-15 23:17 by youxin, 523 阅读, 收藏, 编辑
摘要: 所有的标准库容器都定义了相应的迭代器类型。迭代器对所有的容器都适用,现代 C++ 程序更倾向于使用迭代器而不是下标操作访问容器元素。1.iterator,const_iterator作用:遍历容器内的元素,并访问这些元素的值。iterator可以改元素值,但const_iterator不可改。跟C的指针有点像 (容器均可以++iter,而vector还可以iter-n, iter+n,n为一整型,iter1-iter2:结果是difference_type类型,表两元素的距离.)2.const_iterator 对象可以用于const vector 或非 const vector,它自身的值可 阅读全文

字符串分割成单词

2012-05-15 22:11 by youxin, 1165 阅读, 收藏, 编辑
摘要: 输出一行字符串,根据空白符来分隔单词。先看如何输出一行(带空白) int main(){ string s; //read and split each line of input while(getline(cin,s)) { vector v=split(s); for(vector split(const string& s){ vector ret; typedef string::size_type string_size; string_size i = 0; // invariant: we ha... 阅读全文

C++对象的拷贝与赋值操作

2012-05-15 21:35 by youxin, 889 阅读, 收藏, 编辑
摘要: 转:我的一个同事在用C++编写一个类时,知道什么时候需要实现拷贝构造函数和赋值操作,但不知道什么时候拷贝构造函数被调用,什么时候赋值操作被调用,甚至把二者混为一谈。要弄明白这个问题,最简单的做法莫过于写个测试程序试一下。不过那样做也未必是好办法,实验的结果往往导致以偏概全的结论。不如好好想一下,弄清楚其中的原理,再去写程序去验证也不迟。拷贝构造函数,顾名思义,等于拷贝 + 构造。它肩负着创建新对象的任务,同时还要负责把另外一个对象拷贝过来。比如下面的情况就调用拷贝构造函数:cstringstr=strother;赋值操作则只含有拷贝的意思,也就是说对象必须已经存在。比如下面的情况会调用赋值操作 阅读全文

c++ 字符串直接量

2012-05-15 17:05 by youxin, 855 阅读, 收藏, 编辑
摘要: 一个字符串直接量实际上是一个const char 的数组。它包含的元素个数比字面上的字符数多1.这个额外的字符是'\0';const char hello[]="hello";//编译器自动加上去等价于:const char hello[]={ 'h','e','l','l','o','\0' };初始化字符指针数组。假定我们要把数字表示的成绩转换为字母表示的成绩,根据下面的规则:如果成绩不低于 9 0 80 70 60 0 对应字母成绩: A B C D E下面 阅读全文

C++ main 参数使用

2012-05-13 23:39 by youxin, 1235 阅读, 收藏, 编辑
摘要: C/C++语言中的main函数,经常带有参数argc,argv,如下:int main(int argc, char** argv)int main(int argc, char* argv[])int main(int argc, char argv[ ][ ])这两个参数的作用是什么呢?argc 是指命令行输入参数的个数,argv存储了所有的命令行参数。下面的程序:#include<stdio.h>int main(int argc,char **argv){ int i; for(int i=0;i<argc;i++) printf("Argument %d 阅读全文

c++流迭代器

2012-05-03 23:25 by youxin, 1039 阅读, 收藏, 编辑
摘要: iostream迭代器(iostream iterator):与输入或输出流绑定在一起,用于迭代遍历所关联的IO流。虽然iostream类型不是容器,但标准库同样提供了在iostream对象上使用的迭代器:istream_iterator用于读取输入流,而ostream_iterator则用于写输出流。这些迭代器将它们所对应的流视为特定类型的元素序列。使用流迭代器时,可以用泛型算法从流对象中读数据(或将数据写到流对象中)。iostream迭代器的构造函数istream_iterator<T> in(strm);创建从输入流strm中读取T类型对象的istream_iterator对 阅读全文

C++函数模板

2012-05-01 15:20 by youxin, 381 阅读, 收藏, 编辑
摘要: 泛型编程是一种思想,模板是实现这种思想的基础,STL则是使用模版技术体现泛型思想的结果。 对不同类型数据施以相同操作的一族函数,为重用代码,我们可以把不同的数据类型抽象为类型参数,从而把这多个函数用统一的函数模板(function template)表示出来。从另一个角度说,函数模板也是生成具体函数的模型和样板。函数模板的定义 template <模板参数表> 类型名 函数名(数据形参表) { 函数体 } <模板参数表> 尖括号中不能为空,参数可以有多个,用逗号分开。模板参数主要是模板类型参数。 模板类型参数代表一种类型,由关键字 class 或 typename(建议 阅读全文

C/C++产生随机数

2012-04-25 17:41 by youxin, 1050 阅读, 收藏, 编辑
摘要: C语言/C++怎样产生随机数:这里要用到的是rand()函数, srand()函数,C语言/C++里没有自带的random(int number)函数。(1) 如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间。RAND_MAX定义在stdlib.h, 其值为2147483647。rand()函数产生的是一个随机整数。1 = rand() % 100; // v1 in the range 0 to 99v2 = rand() % 100 + 1; // v2 in the range ... 阅读全文

使用文件来输入输出

2012-04-19 16:29 by youxin, 688 阅读, 收藏, 编辑
摘要: 初学C语言用的方法:文件指针来操作。首先我们需要定义文件指针,为了方便我们不妨定义2个,一个fp1用作输入文件指针,另一个fp2用作输出文件指针。FILE *fp1,*fp2;用fopen打开文件fp1=fopen("test.txt","r"); //输入文件,以只读方式打开fp2=fopen("testOut.text","w"); //输出文件,以写的方式打开ifscanf(fp1,"%d",&x); //从文件中输入fprintf(fp2,"%d",x); / 阅读全文

c++ pair类型

2012-04-17 10:58 by youxin, 2469 阅读, 收藏, 编辑
摘要: pair的应用 pair是将2个数据组合成一个数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存。另一个应用是,当一个函数需要返回2个数据的时候,可以选择pair。 pair的实现是一个结构体,主要的两个成员变量是first second 因为是使用struct不是class,所以可以直接使用pair的成员变量。pair的定义 (头文件为utility)template <class T1, class T2> struct pair;Pair of valuesThis class couples together a pair 阅读全文

转:c++ typedef用法分类

2012-04-16 20:58 by youxin, 264 阅读, 收藏, 编辑
摘要: 用途一:定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb;//这多数不符合我们的意图,它只声明了一个指向字符变量的指针,和一个字符变量;以下则可行:typedef char* PCHAR;PCHAR pa, pb; 用途二:用在旧的C代码中,帮助struct。以前的代码中,声明struct新对象时,必须要带上struct,即形式为:struct结构名对象名,如:struct tagPOINT1{int x;int y;};struct tagPOINT1 p1;而在C++中,则可以直接写:结构名对象名,即:tagPOINT1 p1;.. 阅读全文

转:c++ typedef关键字

2012-04-16 20:48 by youxin, 501 阅读, 收藏, 编辑
摘要: typedef是一种特殊的声明方式,不过它与普通声明的含义大不相同。普通声明的主角是“变量”,它或是创建一个新变量或是对外文件变量使用前的声明;而typedef声明的主角则是“类型”,通过这个声明对一种数据类型引入新的名字。从引入新名字这个角度来说,typedef声明又和宏定义有些相似:用新名字代替已有的名字。接下来的叙述会看到这两者之间的区别。typedef是特殊的 正如一开始所说的那样,typedef是特殊的声明。最常见以及常用的方式如下:1 /* 代码段1 */2 struct stuinfo3 {4 char id[20];5 char name[20];6 ... 阅读全文

c++函数作为参数传递

2012-04-16 20:33 by youxin, 18019 阅读, 收藏, 编辑
摘要: 把函数作为参数传递,常用的方法之一是用typedef定义一个函数指针。#include<iostream>using namespace std;typedef int (*pf)(int,int); //此种方式最容易理解,定义了一个函数指针类型;函数名就是指针。int f(pf p,int a,int b){ return p(a,b);}int add(int a,int b){ return a+b;}int main(){ cout<<f(add,1,2)<<endl;//3}还可以这样:#include<iostream>using 阅读全文
上一页 1 ··· 6 7 8 9 10 11 下一页