设为首页 加入收藏

TOP

C++基础内容复习(一)
2014-02-08 13:36:58 来源: 作者: 【 】 浏览:249
Tags:基础 内容 复习

  下列语句定义了5个变量:

  int count;

  double sales_price,sum;

  std::string title;

  Sales_item bookItem;

  每个定义都是以类型说明符开始,如上int、double、std::string、Sales_item都是类型名,其中int和doubleshi是内置类型,std::string是标准库定义的类型(需要#include <string>), Sales_item是自定义类型。

  ::作用域操作符,含义是右操作符的名字可以在左操作数的作用域中找到

  简化std::string 的写法是使用using.

  比如使用using std::string; using std:cin;之后,在下面的代码中就可以直接使用string和cin了。

  当进行string对象和字符串字面量混合连接操作时,+操作符的左右操作数必须至少有一个是string类型的。

  比如,如下s1的初始化时正确的

  string item ="what a mess!";

  string s1 =item +",";

  但是:string s1 ="what a mess!" +",";

  就会报错,这个和C#是完全不一样的。

  虽然任何整数数值都可以作为索引,但是索引的实际数据类型却是unsigned类型的string::size_type

  vector

  vector是一个类模版(class template),是同一种类型的对象的集合,每个对象都有一个对应的整数索引值,功效上可以参考C#的IList<T>.例如:

  vector<int> int_list;

  vector的初始化有如下几种方式:

  vector<T> v1;//vector保存类型为T对象,默认构造函数v1为空

  vector<T> v2(v1);//v2是v1的一个副本

  vector<T> v3(n,i);//v3包含n个值为i的元素

  vector<T> v4(n);//v4含有值初始化元素的n个副本

  往队尾插入元素的函数是push_back

  迭代器:

  每种容器类型都定义了一个自己的迭代器,比如:

  vector<int>::iterator iter;

  每种容器都定义了begin和end函数;

  比如可以这样写:

  vector<int> int_list(5,10);//初始化为5个10

  vector<int>::iterator iter=int_list.begin();// 迭代器

  将每一个迭代引用的元素设置为0:

  for (vector<int>::iterator i =int_list.begin();i!=int_list.end();i++)

  {

  *i=0;

  }

  另外,所有的容器也还定义了另外一个迭代器,const_iterator,和iterator的区别是前者不可以修改容器元素的值。

  vector<int>::const_iterator

  不允许用const_iterator进行赋值操作。

  任何改变vector长度的操作都会使已经存在的迭代器失效。比如调用push_back之后,就不能再信赖vector的迭代器的值了

  数组:

  数组的维数必须用大于等于1的整数常量表达式定义,这个常量表达式只能是整形字面常量、枚举常量、或者常量表达式初始化的整型const对象。非const变量以及要到运行阶段才知道其值的const变量都不能用于定义数组的维数。

  int main()

  {

  int getNumber();

  const int  max_files=30;

  const int otherNumber =getNumber();

  std::cout《otherNumber《std::endl;

  int staff_size=30;

  char input_buffer1[11];

  char input_buffer2[max_files];

  //char input_buffer3[staff_size];//错误,staff_size是局部变量

  //char input_buffer4[otherNumber];//错误,otherNumber是运行阶段才知道其值的const变量

  Console::WriteLine(L"Hello World");

  Console::ReadLine();

  return 0;

  }

  int getNumber()

  {

  return 2;

  }

  字符数组比较特殊,如下

  char ca1[] = {'C', '+', '+'}; // 缺少 null

  char ca2[] = {'C', '+', '+', '\0'}; // 明确带上 null

  char ca3[] = "C++"; // 自动添加上null

  ca1 的维数是 3,而 ca2 和 ca3 的维数则是 4.

  另外,不允许数组直接复制和赋值。需要注意的是,一些编译器允许将数组赋值作为编译器扩展。但是如果希望编写的程序能在不同的编译器上运行,则应该避免使用像数组赋值这类依赖于编译器的非标准功能。

  与 vector 类型不同,数组不提供 push_back 或者其他的操作在数组中添加新元素,数组一经定义,就不允许再添加新元素。

  在用下标访问元素时,vector 使用 vector::size_type 作为下标的类型,而数组下标的正确类型则是 size_t.

  指针

  与迭代器一样,指针提供对其所指对象的间接访问,只是指针结构更通用一些。与迭代器不同的是,指针用于指向单个对象,而迭代器只能用于访问容器内的元素。

  在定义指针变量时,可用空格将符号 * 与其后的标识符分隔开来。如下三个写法都是正确的:

  std::string* sp =&s;

  std::string *sp =&s;

  std::string*sp =&s;

  而std::string* sp1,sp2;这句实质上定义了sp1这一个指针,而sp2则是普通的string变量。

  很多运行时错误都源于使用了没有初始化的指针。

  如果必须分开定义指针和其所指向的对象,则将指针初始化为 0.因为编译器可检测出 0 值的指针,程序可判断该指针并未指向一个对象。

  说明:

  指针中的*操作符的含义是对指针进行解引用获得该指针所指向的对象。解引用操作符返回左值,因此可为其结果赋值,等效于为该指针所指向的特定对象赋值。

  &操作符则是返回操作数对象在内存中的存储地址,不可赋值。

   

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++空类中的默认函数 下一篇C++中的explicit关键字

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Libevent C++ 高并发 (2025-12-26 00:49:30)
·C++ dll 设计接口时 (2025-12-26 00:49:28)
·透彻理解 C 语言指针 (2025-12-26 00:22:52)
·C语言指针详解 (经典 (2025-12-26 00:22:49)
·C 指针 | 菜鸟教程 (2025-12-26 00:22:46)