代码改变世界

C++学习笔记之一

2014-03-02 21:17  WangSeaQuan  阅读(239)  评论(0)    收藏  举报

C++11和C++98相比,改动很大,最近买了本C++ Primer第五版,觉得有必要好好的重新学学C++。

1.写控制台程序,窗口显示会一闪而过,有两种方法解决:一种方法就是用system("pause"),这是控制台程序调用系统的pause命令,而pause系统命令的功能很简单,就是在命令行输出“按任意键继续...”,等待用户按一个键,然后返回。另一种方法就是使用cin.get(),但是在使用cin.get()要注意一点的就是get()会直接从输入流中读取字符,如果之前有使用cin,则输入流中剩下的字符(包括空字符)都会被get()接收,这样便达不到窗口停顿的目的。这里我们可以先用cin.clear()清除输入流的错误状态(防止有),再用cin.sync()来清空输入流中的内容,见下面代码。

2.C++11提供了新类型auto、decltype和constexpr,感觉这些类型的提出都是从在编译阶段对程序进行优化,提高程序的运行效率,可惜对于constexpr,VS2013并不支持。

3.C++在数组中增加了函数begin和end函数,这样数组和vector的距离就更近了,值得注意的是这两个函数是定义在<iterator>头文件中。

4.数组名一般都是同时作为数组首元素的地址,如定义一个数组ia,那么auto p(ia)中p的类型是一个指针,指向数组的首元素,但是对于decltype(ia) ib来说,ib是一个含有与ia相同数量元素的数组。

#include <iostream>
#include <iterator>
#include <cctype>
using std::cout; using std::cin; using std::endl;
using std::begin; using std::end;

int main()
{
	// 数组的维度num必须为常量表达式,由于VS不支持constexpr,只能用const
	const size_t num = 5;
	int ia[num] = { 1, 2, 3, 4, 5 };

	int *beg = begin(ia), *last = end(ia);
	while (beg != last)
	{
		cout << *beg << "	";
		++beg;
	}
	cout << endl;
	
	unsigned n;
	cin >> n;
	while (n--)
	{
		cout << "Visual Image" << "	";
	}

	cin.clear(); cin.sync(); cin.get(); // system("pause")
	
	return 0;
}