发表人信箱: [email protected] 
发表人网址: http://www.research.att.com/~bs/homepage.html 
 
 如何编写简练的程序?特别是在输入数据,处理数据,然后输出结果这样的情况下。  
 
======================================================================我常常,尤其在学习班上,遇到这样的问题:如何编写简练的程序?特别是在输入数据,处理数据,然后输出结果这样的情况下。下面是一个这样的应用代码: #include<iostream>
#include<vector>
#include<algorithm>
using namespace std; int main()
{
vector<double> v; double d;
while(cin>>d) v.push_back(d); // 读取数据并进栈
if (!cin.eof()) { // 检验是否输入结束字符
cerr << "format error\n";
return 1; // 出错返回
} cout << "read " << v.size() << " elements\n"; reverse(v.begin(),v.end());
cout << "elements in reverse order:\n";
for (int i = 0; i<v.size(); ++i) cout << v[i] << '\n'; return 0; // 成功返回
}这段代码有几个看点:这里使用了C++的ISO标准库函数。用声明命名空间为std(后面不加".h"后缀)方式调用标准库函数。如果是在Windows机器上编译这段代码,要定义为控制台应用(console application)。记住要在源程序文件末尾标明为".cpp"后缀,否则系统认为是C语言而不是C++语言。当然,main()主函数返回int值。将输入数据读到向量集(vector)中能够防止出现“内存溢出”的错误。如何将数据读进数组而又不导致发生“愚蠢”的错误,这个问题超出了对新手的要求。如果你能作到这点,你就已经不是一个新手了。如果你不相信这句话,请到我的站点参考"Learning Standard C++ as a New Language"一文,可以在我的发布目录下载这篇文章。!cin.eof()用于测试输入流的结束状态。特别用于判别是否在输入结束时跳出循环体。如果不是结束字符就表示得到错误的输入类型/格式。程序本身并不显式地管理内存和释放内存。向量能够跟踪内存使用状态。需要更多内存时,它能够分配更多的内存;超出作用域时就释放内存。因此开发者不必为向量元素使用内存的分配和释放操心。控制台输入结束时,程序随之结束。在Unix系统下,输入结束的字符是"Ctrl-D"。但对于Windows系统,这却是一个遗留的缺陷,它没有相应的结束输入的字符表达。所以程序略作改动,当输入为"end "时,程序结束: #include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std; int main()
{
vector<double> v; double d;
while(cin>>d) v.push_back(d); // 读取数据并进栈
if (!cin.eof()) { // 检验是否输入结束字符
cin.clear(); // 清空出错流
string s;
cin >> s; // 输入转换为结束字符
if (s != "end") {
cerr << "format error\n";
return 1; // 出错返回
}
} cout << "read " << v.size() << " elements\n"; reverse(v.begin(),v.end());
cout << "elements in reverse order:\n";
for (int i = 0; i<v.size(); ++i) cout << v[i] << '\n'; return 0; // 成功返回
}