The best input is OUTPUT.

2016-03-16
C++中输出的格式控制

在上一篇总结里也提到过,ostream是从ios类派生出来的,而ios类是从ios_base类派生出来的。
对于输出的格式控制,ios_base类起到了至关重要的作用,因为他提供了控制格式的成员方法和成员数据。

字段宽度和精度

先介绍这两个,因为控制这两个格式的成员数据是单独存储在ios_base类中的。

控制字段宽度

函数原型:

1
2
int width();  // 返回字段宽度的当前设置
int width(int i); // 将字段宽度设置为i个空格,并返回以前的字符宽度值

width()方法只影响接下来显示的一个项目
Read More

2016-03-16
C和C++中的I/O

C和C++中的I/O

C和C++程序都把输入和输出看作是字节流。即输入的时候从输入流中抽取字节;输出的时候将字节放入到流中。输入流中的字节可能来自键盘,也可能来自存储设备(如硬盘)或其他程序。同样,输出流中的字节可以流向屏幕、打印机、存储设备或者其他程序。
这里流充当了程序和流源或者流目标之间的桥梁
C/C++程序只是检查字节流就好了,这使得程序可以以相同方式处理来自不同的输入源,程序不需要知道这字节流是最初是来自哪里的,输出流也是如此。
因此要管理输入和输出需要两步:

  1. 将流域输入和输出去向的程序关联起来
  2. 将流与文件关联起来
Read More

2016-03-16
初识STL迭代器(iterator)和函数符(functor)

初识STL迭代器(iterator)和函数符(functor)

对于STL我真的是久仰大名了,这次从《Cpp Primer Plus》中初次学习STL中的一些知识,学习到迭代器将算法从具体的容器类型中抽离出来,真的是很nb的想法。
我在这里稍微总结下我初次学习STL时候对其中迭代器和函数符概念的一点理解。

泛型编程

首先还是泛型编程,这种编程的范式是我之前没有接触过的,之前的面向对象编程的关注点是编程的数据方面,例如如何控制数据的访问权限等等。但是泛型编程的关注点是算法,例如将算法从数据类型中抽离出来,将算法从容器类型中抽离出来等等。
虽然面向对象和泛型编程的思想都是抽象和创建可重用的代码,但他们的理念是决然不同的。

C++中的模板为编写独立于数据类型的函数和类提供了可能,而STL通过迭代器将编写独立于容器类型的通用函数提供了可能。

Read More

2016-03-16
关于C++中的智能指针模板类

智能指针是行为类似于指针的类对象,但是他们还有更重要的功能来帮助管理动态内存分配。
他们的一个主要的思想就是:

使用智能指针指向堆中的内存(这和常规指针相同),但是智能指针会在智能指针变量过期销毁时自动将其指向的堆内存释放掉。这样就避免了程序员忘记释放内存而造成的隐患,如内存泄漏。。。
其本质也就是将智能指针模板类的*运算符进行了重载,然后再析构函数中添加了释放对内存的功能。
Read More

2016-03-16
C++ Primer Plus 6th, complete!

C++ Primer Plus 6th, complete!

终于把《C++ Primer Plus 6th》看完啦,课后习题全部敲玩,算是一只脚踩进了C++的大坑里.

习题代码已放到GitHub上 $\rightarrow$ Cpp-Primer-Plus Answers

接下来开始砍树啦,
KMCLib,先让我摸透你然后再搞定了你!

Read More

2016-03-16
ios_base()对象没有公共复制构造函数

今天写C++ Primer Plus17章的最后一题,要构造一个Store函数符来将vector中的string对象写入文件,但是写好后编译器一直报错

1
std::ios_base::ios_base(const std::ios_base&) is private

看样子是标准库里面的报错,我写的Store类如下
1
2
3
4
5
6
7
8
9
10
// functor Store
class Store
{
private:
std::ostream os;
public:
Store(std::ostream & o) : os(o) {}
// overloaded funtions
void operator()(const std::string & s);
};

Read More