開始自己的C++复习进阶之路。

声明:

这次写的博文纯当是一个回想复习的教程。一些非常基础的知识将不再出现。或者一掠而过,这次的主要风格就是演示样例代码非常多~~~

全部代码在Ubuntu 14.04 LTS 版,GCC4.8.1(g++)编译通过。其它的平台没试过。预计有些代码在VC6.0以下通过不了,由于有些语言特性是C++11标准的。

以下就是正文的開始吧。

一、C++必须说和必须略过的一些东西

1、工具

工具的话。简答的编程貌似如今已经习惯了在GCC(g++)下了。Linux平台以下,一般不须要非常大的project的时候我都是用VIM写好代码,直接执行了。略微复杂一点的就用CodeBlocks。只是因为打字速度一般,认为VIM的编辑功能也不是非常强,所以通常是把代码什么的在VIM写好,然后凝视文档以及具体的阅读改动的就直接上Sublime Text或者Gedit了。(Emacs还没用到过, -_-||).

Windows以下的话。假设写的代码用不到C++11的新特性那就用VC6.0吧。CodeBlocks也能够,只是写这篇教程的时候我用的是VS2010的cmd编译的。貌似Windows以下好多各种的编译器。。。喜欢什么用什么吧。假设要用C++11特性的话。貌似CodeBlocks最新版本号的是能够支持的。其它的编译器布吉岛。

所以。关于编译器的问题,或者因为编译器导致的问题,就不说了。麻烦。

2、代码风格

代码风格神马的也貌似没什么能够说的,无非是你的花括号是怎么括,你的运算符两旁有没有空格,你的凝视是写在哪里等等。。

关于我的风格在详细的演示样例中能够看粗来。

全部的风格仅仅要不要太标新立异或者奇葩的话。坚持你的风格就好啦。这个实在没有什么好说的。

3、文档凝视

关于C++自己主动文档生成我选择了Doxygen,这个在Windows和Linux以下都能用,只是Windows以下还没用,只是目測应该要比Linux以下好看和易用一点吧。

关于这个文档的一些keyword和标准请查看官方文档或者自行百度,Google一下。非常多人都写了技巧和使用方法。

所以,关于文档和凝视什么不再解释。

以下開始详细的回想复习了。。

二、C++基础

2.1整数表达式

程序演示样例:输入一系列的整数,输出其平均值。当输入的数字小于0个的时候给出提示。

整数表达式这些的。实在不是必需多费口舌。

直接上代码。

代码例如以下:

/*************************************************************************> File Name: list0301_int_exp.cpp> Author: suool> Mail: 1020935219@qq.com > Created Time: 2014年05月16日 星期五 21时06分20秒************************************************************************/#include<iostream>
using namespace std;int main()
{int sum(0);int count(0);int x;while(cin >> x){sum += x;count += 1;}if(count <= 0){cout << count << endl; cout << "The couunt is below zero !" << endl;}else {cout << count << endl;cout << "Average = " << sum/count << endl ;}return 0;
}

执行结果和演示样例略去。(当时执行的时候木有截图,如今也不想执行截了。)

2.2字符串与简单的输入输出

这一部分涉及到转义字符,关于转义字符,在C语言和其它语言里面大家应该都灰常清楚了,所以,不再说了-_-||。

。。。

非常显然C++的输入输出操作符>> & <<大家都明确的:操作符箭头指向爱你过的方向是信息流向的方向:从流到变量是输入。从变量到流是输入。

以下是一个字符串的简单演示样例:一个简单的人机交互对话。代码入下:

/*************************************************************************> File Name: list0502_cin_string.cpp> Author: suool> Mail: 1020935219@qq.com > Created Time: 2014年05月16日 星期五 21时23分43秒************************************************************************/#include<iostream>
#include<string>
using namespace std;int main()
{string name;string response;cout << "What's your name ?" << endl;cin >> name ;cout << "Hello " << name << ", how are you ?

" <<endl; cin >> response ; cout << name << "Good bye !" << endl; }

2.3格式化输出(流程控制语句)

关于if或者while或者for等等循环控制语句没有必要再讲了吧。这些实在是看代码都能看懂的东西。

仅仅要有点其它的语言基础都没问题的。

So。让我们直接进入C++的格式化输出。

我们首先要达到以下的输出效果,要求就是写出这个程序。

效果例如以下:

程序代码例如以下:

/*************************************************************************> File Name: list0801_cout_format.cpp> Author: suool> Mail: 1020935219@qq.com > Created Time: 2014年05月16日 星期五 21时31分52秒************************************************************************/#include<iostream>
#include<iomanip>
using namespace std;int main()
{cout << " N    N^2    N^3" << endl;// cout.flags(ios::left);for (int i = 0; i < 21; i++ ){cout << setw(2) << i+1<< setw(7) << (i+1)*(i+1)<< setw(8) << (i+1)*(i+1)*(i+1)<< endl;}cout << "Finaish it !" << endl;return 0;
}

从上面的代码应该就能够看出,C++关于对齐方式的设置是使用cout.flags(ios::left);进行设置的,以下的程序中有第二种的设置方法,就是使用cout << right; 前提是声明#include<ios>。

So。以下看一个略微复杂一点的格式化输出,输出的效果例如以下:(事实上就是乘法表。。)

效果例如以下:

程序代码例如以下:

/*************************************************************************> File Name: list0807_table_cout.cpp> Author: suool_hu> Mail: 1020935219@qq.com > Created Time: 2014年05月17日 星期六 19时14分40秒************************************************************************/#include<iomanip>
#include<iostream>
#include<string>
using namespace std;// 输出10X10的一个乘法表
int main()
{// 基本变量设置int const min(1);int const max(10);int const colwidth(4);// cout << ios::right;// 打印表头cout << setw(colwidth) << '*' << '|';for (int i=1; i<=max ; i++)cout << setw(colwidth) << i;cout << endl;// 打印切割行// 设置填充符cout << setfill('-') << setw(colwidth) << ""<< '+'<< setw(max * colwidth) << ""<< endl;// 重设填充符cout << setfill(' ');// 打印每一行for (int row=1; row<=max; row++){cout << setw(colwidth) << row << '|';for (int col= 1; col<=row; col ++){cout << setw(colwidth) << row*col;}cout << endl;}return 0;
}

以下的小程序是关于setw()函数和对其方式和默认填充方式设置的详细表现的演示样例:

演示样例一:

/*************************************************************************
> File Name: list0803.cpp
> Author: suool_hu
> Mail: 1020935219@qq.com
> Created Time: 2014年05月16日 星期五 22时56分42秒
************************************************************************/
/** Using Alternative Fill Characters  */
#include <iomanip>
#include <iostream>
#include <ostream>int main()
{using namespace std;int day(16);int month(5);int year(2014);int dollars(42);int cents(7);// Print date in USA order. Later in the book, you will learn how to// handle internationalization. //setfill()填充方式设置cout << "Date: " << setfill('0') << setw(2) << month << '/' << setw(2) << day<< '/' << setw(2) << year << '\n';cout << "Pay to the order of: CASH\n";cout << "The amount of $" << setfill('*') << setw(8) << dollars << '.'<< setfill('0') << setw(2) << cents << '\n';return 0;
}

效果例如以下:

演示样例二:

/*************************************************************************> File Name: list0804_format_cout.cpp> Author: suool_hu> Mail: 1020935219@qq.com > Created Time: 2014年05月16日 星期五 21时56分42秒************************************************************************/#include<iostream>
#include<iomanip>
#include<string>
#include<ios>
using namespace std;
// 格式化输出练习
int main()
{cout << '|' << setfill('*') << setw(6) << 1234 << '|' << endl;cout << '|' << left <<         setw(6) << 1234 << '|' << endl;cout << '|' <<                 setw(6) << 1234 << '|' << endl;cout << '|' << right <<        setw(6) << 1234 << '|' << endl;return 0;
}

效果例如以下:

2.4数组和向量

如今我们要写一个程序。要求实现:从标准输入读取数字,然后将数字排序后输出,每行输出一个。

有些人可能先想到的数据结构是用数组解决,只是。在C++中,数组是一种比較劣等的数据结构了,大多数时候我们都更倾向于使用C++的容器类型的数据结构。这个程序我们就能够使用容器中的向量来解决,代码例如以下:

/*************************************************************************> File Name: list0904_iterator_alg.cpp> Author: suool_hu> Mail: 1020935219@qq.com > Created Time: 2014年05月18日 星期日 07时47分42秒************************************************************************/#include<algorithm>
#include<iostream>
#include<iterator>
#include<string>
#include<vector>using namespace std;// 适用迭代器和算法读入数字并排序(向量存储)
int main()
{cout << "请输入数字:" << endl;vector<int> data;// 每次读取一个数字copy(istream_iterator<int>(cin),istream_iterator<int>(),back_inserter(data));// 排序sort(data.begin(), data.end());cout << "您输入的数字的排序结果为:"<< endl;// 打印向量,一行一个数字copy(data.begin(), data.end(), ostream_iterator<int>(cout, "\n"));
}

关于向量:

类型:在尖括号内部的是向量的类型vector<int> data;是int类型的向量

初始化:vector没有大小,能够随时扩充和缩小,没有数组的长度大小的限制。可是在初始化的时候依旧能够声明其长度大小,如:

Vector<int>  full_zero(10);    // 默认以0初始化,这个含有10个0的向量
Vector<int> full_ten(41, 10);   // 包括41个10的向量。声明以10初始化

Vector有非常多自带的方法,比方插入,删除等等内置方法,详细须要使用什么方法请自行百度吧。

迭代器

上面的代码中有一个调用的函数是sort,不要以为那个是vector的成员函数,那个事实上是C++ STL中的一个函数。能够对全部传递给他的序列进行排序。仅仅要该类型能够用比較操作符(即是大于或者小于),通过提供初始位置和末端位置。

关于上面的那个begin和end的位置。end是超出末端元素的下一个位置,例如以下图解:

Std::sort是泛型算法的一个样例,之所以称之为泛型,是由于这些函数实现了通用算法而且具有一般性。

即是说。仅仅要可以表示成一个序列且数据可以比較。就能调用泛型算法中函数。大部分在头文件<algorithm>中,一部分在<numeric>中。

差点儿全部的泛型都使用迭代器(唯一的例外是std::min & std::max,他们返回序列中最大最小值)。C++中总共同拥有五种迭代器。可是能够分为两类:读迭代器和写迭代器。

读迭代器:指向值序列中的一个位置。使得能够对该序列进行读操作。

算法对于输入使用读迭代器。且不改动值。一般而言,必须指定一对读迭代器:開始位置和超出末端的下一个位置。

写迭代器:指向序列中的一个位置。从该位置算法開始写输出。

一般而言,仅仅须要指定输出序列的位置就可以。

算法不能检查溢出,因此必须保证输出序列有足够的空间容纳算法要写的全部内容。

Such as:  std::copy( ) 算法从一个输入序列中复制值到一个输出序列。函数有三个參数:两个读迭代器以指定范围。一集一个写迭代器指定输出范围的開始位置,因此必需要保证输出有足够大的容量。

C++基础学习教程(一)相关推荐

  1. 虚幻引擎虚拟现实开发基础学习教程

    流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:3.93 GB |时长:5h 15m 了 ...

  2. 动画产业基础学习教程 Rad How to Class – Animation Industry Fundamentals

    如何分类--动画产业基础 大小解压后:6.2G 含课程素材 1920X1080 mp4 语言:英语+中英文字幕(根据原英文字幕机译更准确) 信息: 绘画技巧.解剖学.角色设计.透视和整体讲故事--这门 ...

  3. ue5新手零基础学习教程 Unreal Engine 5 Beginner Tutorial - UE5 Starter Course

    ue5新手零基础学习教程 Unreal Engine 5 Beginner Tutorial - UE5 Starter Course! 教程大小解压后:4.96G 语言:英语+中英文字幕(机译)时长 ...

  4. java学习_Python基础学习教程:从0学爬虫?让爬虫满足你的好奇心

    Python基础学习教程:从0学爬虫?让爬虫满足你的好奇心 有必要学爬虫吗? 我想,这已经是一个不需要讨论的问题了. 爬虫,"有用"也"有趣"! 这个数据为王的 ...

  5. html怎么在线安装,web前端零基础学习教程,如何安装HTML编辑器!

    原标题:web前端零基础学习教程,如何安装HTML编辑器! HTML 编辑器推荐: 可以使用专业的 HTML 编辑器来编辑 HTML,菜鸟教程为大家推荐几款常用的编辑器: Notepad++:http ...

  6. Python基础学习教程:如何用Python来写pm2.5空气质量查询程序

    今天就教大家用之前有跟大家分享过的python基础学习教程完成首个MVP,如何用CLI(command-line interface,命令行界面)来执行第一个空气质量查询程序. 知识点 如何进行txt ...

  7. python exit()什么意思_Python基础学习教程:如何用Python来写pm2.5空气质量查询程序...

    今天就教大家用之前有跟大家分享过的python基础学习教程完成首个MVP,如何用CLI(command-line interface,命令行界面)来执行第一个空气质量查询程序. 知识点 如何进行txt ...

  8. Python学习教程(Python学习路线_Python基础学习教程_Python视频教程):初学者新手怎样快速入门Python

    Python学习教程(Python学习路线_Python基础学习教程_Python视频教程):初学者新手怎样快速入门Python? 人生苦短,我用Python!!!短短几个字,现在在各大学习类平台随处 ...

  9. 渗透测试工程师零基础学习教程2023年最新版,想入门学习这一篇就够了。

    什么是渗透测试? 渗透测试是指通过模拟黑客攻击的方式,评估一个系统或网络的安全性能,以发现潜在的漏洞或安全弱点.渗透测试通常包括对目标系统或网络进行多种攻击方式的测试,如密码破解.漏洞利用.社会工程学 ...

  10. CSS基础学习教程(一)

    一.CSS基础教程 1.1 CSS介绍 CSS1 是一种描述 HTML 文档样式的语言.CSS 描述应该如何显示 HTML 元素. 定义: CSS 指的是层叠样式表* (Cascading Style ...

最新文章

  1. Radware:当前,CDN安全远远不足
  2. devc 能优化吗_SEO关键词推广要多少钱?关键词优化选择外包靠谱吗?
  3. Powershell 命令行泄漏下一个 Windows 10 更新内容
  4. Linux timer调用流程图,Linux应用层的定时器Timer使用详解【转】
  5. 17_android下xmlpull解析
  6. 计算机配置 凭据分配,win7怎样添加凭据?-win7添加凭证的方法 - 河东软件园
  7. jdk 取整数_JDK 15中的确切绝对整数
  8. 因财务造假,贾跃亭被罚 2.41 亿元;华为徐直军重申不造成:但将推子品牌汽车;Gradle 7.0 发布|极客头条...
  9. 专线服务器安全维护,服务器系统安全维护
  10. 深入浅出Linux设备驱动编程--设备驱动中的异步通知
  11. windows下OpenCV扩展模块(Extra Contrib)配置时的“Invalid escape sequence \o“解决方法
  12. aliddns ipv6_利用阿里云ddns动态解析ipv6地址
  13. 禁止java自动更新_修改注册表彻底关闭Java自动更新
  14. 在线计算机表格制作,excel表格制作,教您excel怎么制作表格
  15. 团组情景意识概念模型
  16. 射灯安装方法图解_射灯如何安装—射灯的安装方法介绍
  17. 构建一个 CLI 工具
  18. VM虚拟机Ubuntu配置静态ip,亲测有效
  19. ios 视频处理详解一(视频导出)
  20. 妙语联珠----有钱时、没钱时(节选自上海东方台)

热门文章

  1. python--lambda
  2. CentOS6.X安装QQ2012
  3. debian 升级后mysql_教你在Debian和Ubuntu上升级MySQL
  4. Redis-Bitmap介绍及使用
  5. 教你手工检测SQL注入
  6. OpenstackNova-KVM性能调优
  7. 图像目标检测(Object Detection)原理与实现(一)
  8. 解决方案:Nginx高可用方案
  9. Nginx应用场景之反向代理
  10. 关于@Import注解的几个问题