码迷,mamicode.com
首页 > 编程语言 > 详细

Accelerated c++ 读书笔记1

时间:2015-08-16 12:13:26      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:

相关的c++课程听了不少,但听课不能代替看书,书籍系统的总结对于形成体系,查漏补缺还是有很大作用的。

市面上c++书籍多如牛毛,公认好评的无非《c++ primer》,《The c++ programming language》等全面介绍语言特性的书籍和 《effective c++》 《more effective c++》等专家建议类书籍。为了对应自己正在进行的c++系列课程的学习,需要短时间内对c++有一个系统的梳理,即采用2-8原则,以较短的时间,掌握最为常用的那部分。显然上述最上所述两个大部头,不是当下的首选。所以另一本市面已不多见,但也曾公认好评的入门书,《accelerated c++》可能就是最好的选择(像书中所说,如果你想使用c++编程,就需要掌握这本书中的所有知识,尽管它没有告诉你想知道的一切)。在接下来假期这段时间内,自己需要仔细阅读并尽量多地完成书中的习题,在此开始总结帖,希望能把收获进行梳理沉淀。

然而,正如侯捷老师所说,“作为一个好的学习者,重要的事你的学习态度,起步固然可以从轻松小品开始,但如果碰上大部头就退避三舍,逃之夭夭,面对任何技术只求快餐速成,学语言而从来不写程序,那就永远没有成为高手的一天。” 与自己共勉,开学后开读《c++ primer》...

 

第0章 入门

对hello world程序的讲解梳理,自然不会有什么新的东西,相关概念的复习吧。

 

第一章 使用字符串

本章程序:

// ask for a person‘s name, and generate a framed greeting
#include <iostream>
#include <string>

int main()
{
    std::cout << "Please enter your first name: ";
    std::string name;
    std::cin >> name;

    // build the message that we intend to write
    const std::string greeting = "Hello, " + name + "!";

    // build the second and fourth lines of the output
    const std::string spaces(greeting.size(),  );
    const std::string second = "* " + spaces + " *";

    // build the first and fifth lines of the output
    const std::string first(second.size(), *);

    // write it all
    std::cout << std::endl;
    std::cout << first << std::endl;
    std::cout << second << std::endl;
    std::cout << "* " << greeting << " *" << std::endl;
    std::cout << second << std::endl;
    std::cout << first << std::endl;

    return 0;
}

1. wchar_t 用来存放“宽字符”的内置类型,宽字符是一种足够大的类型,可以为多种语言保存字符。

2. string 类 有一种

string z(n,c)的操作,即定义string类型变量z,并且用字符c的n份复制来初始化z。   注意: c必须为char类型,不能使string类型或字符串常量

3. string类加号  s+t  中, s或者t中任意一个都可以是(但不可以两个都是)字符串直接量或者char类型

所以

std::string exclaim = "!";

std::string s = "Hello" + ", World" + exclaim;  //错误,+左结合,出现了两个字符串常量相加

 

第二章 循环和计数

本章介绍了while,if,for等语句的用法,设计while语句时的循环不变式的概念,以及算数,逻辑操作符和他们的优先级,新东西不多,看程序和注释吧

#include <iostream>
#include <string>

// say what standard-library names we use
using std::cin;         using std::endl;
using std::cout;        using std::string;


int main()
{
    // ask for the person‘s name
    cout << "Please enter your first name: ";

    // read the name
    string name;
    cin >> name;

    // build the message that we intend to write
    const string greeting = "Hello, " + name + "!";

    // the number of blanks surrounding the greeting
    const int pad = 0;

    // the number of rows and columns to write
    const int rows = pad * 2 + 3;
    const string::size_type cols = greeting.size() + pad * 2 + 2;    //当定义一个变量来保存特定数据结构的大小时,
                                                                     //养成使用标准库定义的相应类型的好习惯 .
                                                                     //size_t  无符号整数类型(来自头文件<cstddef>),可包含任意对象长度
                                                                     //string::size_type 无符号整数类型,包含任意string对象长度 

    // write a blank line to separate the output from the input
    cout << endl;

    // write `rows‘ rows of output
    // invariant: we have written `r‘ rows so far
    for (int r = 0; r != rows; ++r) {

        string::size_type c = 0;

        // invariant: we have written `c‘ characters so far in the current row
        while (c != cols) {

            // is it time to write the greeting?
            if (r == pad + 1 && c == pad + 1) {
                cout << greeting;
                c += greeting.size();
            } else {

                // are we on the border?
                if (r == 0 || r == rows - 1 ||
                    c == 0 || c == cols - 1)
                    cout << "*";
                else
                    cout << " ";
                ++c;
            }
        }

        cout << endl;
    }

    return 0;
}

 

第三章 使用批量数据

主要是vector的定义和相关操作,以及流输出控制符的介绍。

1 头文件<ios>定义了streamsize 类型,这是输入输出库用来表示长度的类型;

   头文件<iomanip>定义了控制符setprecision,用来说明希望输出中包含多少位有效数字

2 vector 

size_type 无符号类型,足够存储最大的vector大小;

v.begin(),  v.end(), v.push_back, v.size(),

3 其他库函数

sort(b,e),  max(e1,e2), while(cin>>x),

s.precision(n) 设置流s以后的输出精度为n,(省略n保持原有的输出精度)返回原有的输出精度

setprecision(n) 

#include <algorithm>
#include <iomanip>
#ifndef __GNUC__
#include <ios>
#endif
#include <iostream>
#include <string>
#include <vector>

using std::cin;             using std::sort;
using std::cout;            using std::streamsize;
using std::endl;            using std::string;
using std::setprecision;    using std::vector;

int main()
{
    // ask for and read the student‘s name
    cout << "Please enter your first name: ";
    string name;
    cin >> name;
    cout << "Hello, " << name << "!" << endl;

    // ask for and read the midterm and final grades
    cout << "Please enter your midterm and final exam grades: ";
    double midterm, final;
    cin >> midterm >> final;

    // ask for and read the homework grades
    cout << "Enter all your homework grades, "
            "followed by end-of-file: ";

    vector<double> homework;
    double x;
    // invariant: `homework‘ contains all the homework grades read so far
    while (cin >> x)
        homework.push_back(x);

    // check that the student entered some homework grades
#ifdef _MSC_VER
    typedef std::vector<double>::size_type vec_sz;
#else
    typedef vector<double>::size_type vec_sz;
#endif
    vec_sz size = homework.size();
    if (size == 0) {
        cout << endl << "You must enter your grades.  "
                        "Please try again." << endl;    
        return 1;
    }

    // sort the grades
    sort(homework.begin(), homework.end());

    // compute the median homework grade
    vec_sz mid = size/2;
    double median;
    median = size % 2 == 0 ? (homework[mid] + homework[mid-1]) / 2
                           : homework[mid];

    // compute and write the final grade
    streamsize prec = cout.precision();
    cout << "Your final grade is " << setprecision(3)
         << 0.2 * midterm + 0.4 * final + 0.4 * median
         << setprecision(prec) << endl;

    return 0;
}

 

Accelerated c++ 读书笔记1

标签:

原文地址:http://www.cnblogs.com/wangxiaobao/p/4733933.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!