《C++ Primer》5th
IDE:Visual Studio 2015
20th 毛金勇
目录
第 1 章 开始 ............................................................................................................................. 1
第 3 章 字符串、向量和数组 ................................................................................................. 5
第 4 章 表达式 ....................................................................................................................... 15
第 5 章 语句 ........................................................................................................................... 16
第 6 章 函数 ........................................................................................................................... 23
第 7 章:类 ............................................................................................................................. 32
第 8 章:IO 库 ........................................................................................................................ 32
第 9 章 顺序容器 ................................................................................................................... 38
第 10 章:泛型算法 ............................................................................................................... 53
第 11 章:关联容器 ............................................................................................................... 68
第 1 章 开始
P8
练习 1.3
#include
int main()
{
std::cout << "Hello,World." << std::endl;
return 0;
}
练习 1.4
#include
int main()
{
int v1,v2;
std::cin >> v1 >> v2;
std::cout << "The sum of "<< v1 <<" and "<< v2 << " is " << v1*v2 << std::endl;
return 0;
}
练习 1.6
#include
int main()
{
int v1,v2;
std::cin >> v1 >> v2;
std::cout << "The sum of "<< v1;
<<" and "<< v2;
<< " is " << v1+v2 << std::endl;
return 0;
}
以上程序是不合法的。原因在于:<<运算符接受两个运算对象,左侧的运算对象必须是一个 ostream
对象,右侧的运算对象是要打印的值。
因此应该修改为:
#include
int main()
{
int v1,v2;
std::cin >> v1 >> v2;
std::cout << "The sum of "<< v1;
std::cout <<" and "<< v2;
std::cout << " is " << v1+v2 << std::endl;
return 0;
}
或者,去掉分号,只保留最后一个
#include
int main()
{
}
int v1,v2;
std::cin >> v1 >> v2;
std::cout << "The sum of "<< v1
<<" and "<< v2
<< " is " << v1+v2 << std::endl;
return 0;
P9
练习 1.9
#include
int main()
{
}
int sum = 0, val = 50;
while(val <= 100){
sum += val;
++val;
}
std::cout << "Sum of 50 to 100 is " << sum << std::endl;
return 0;
练习 1.10
#include
int main()
{
int val = 10;
while(val >= 0){
std::cout << val << " ";
--val;
}
return 0;
}
练习 1.11
#include
int main()
{
}
int v1,v2;
std::cout << "Please enter two numbers" << std::endl;
std::cin >> v1 >> v2;
if(v1 > v2){
std::cout << "ERROR!" << std::endl;
}
while(v1 <= v2){
std::cout << v1 << " ";
++v1;
}
return 0;
P15
练习 1.16
/*读取数量不定的输入数据*/
#include
int main()
{
}
int sum = 0,val;
while(std::cin >> val){ //输入文件结束符的方法是:Ctrl+Z 然后按 Enter
sum += val;
}
std::cout << "Sum is: " << sum << std::endl;
return 0;
P16
练习 1.18
/*统计在输入中每个值连续出现的次数*/
#include
int main()
{
int currVal = 0,val = 0;
if(std::cin >> currVal){
int cnt = 1;
while(std::cin >> val){
if(val == currVal) ++cnt;
else{
}
std::cout << currVal << " occurs " << cnt << " times." << std::endl;
currVal = val;//记住新值
cnt = 1;//重置计数器
}
//打印文件最后一个值的个数
std::cout << currVal << " occurs " << cnt << " times." << std::endl;
}
return 0;
}
P20
练习 1.20(先下载头文件 Sales_item.h)
#include
#include"Sales_item.h"
int main()
{
Sales_item book;
while(std::cin >> book){
std::cout << book << std::endl;
}
return 0;
}
练习 1.21
#include
#include"Sales_item.h"
int main()
{
Sales_item item1,item2;
std::cin >> item1 >> item2;
std::cout << item1+item2 << std::endl;
return 0;
}
练习 1.22
#include
#include"Sales_item.h"
int main()
{
}
Sales_item book,total;
while(std::cin >> book){
total += book;
}
std::cout << total << std::endl;
return 0;
P21
练习 1.23 & 1.24(思路和练习 1.18 很像的)
#include
#include"Sales_item.h"
int main()
{
Sales_item total;
if(std::cin >> total){
Sales_item temp;
while(std::cin >> temp){
if(total.isbn() == temp.isbn()){
total += temp;
}else{
std::cout << total << std::endl;
total = temp;
}
}
std::cout << total << std::endl;
}
return 0;
}
第 3 章 字符串、向量和数组
P81
练习 3.2
#include
#include
using namespace std;
int main()
{
string s1;
getline(cin,s1);//读入一整行,包括空白符,遇到换行符则停止
cout << s1 << endl;
string s2;
while(cin >> s2){//读取数量未知的 string 对象
cout << s2 << endl;
}
return 0;
}
练习 3.4
#include
#include
using namespace std;
int main()
{
string s1,s2;
cin >> s1 >> s2;
if(s1 != s2){//输出较大的字符串
if(s1 > s2) cout << s1 << endl;
if(s1 < s2) cout << s2 << endl;
}
if(s1.size() != s2.size()){//输出较长的字符串
if(s1.size() > s2.size()) cout << s1 << endl;
if(s1.size() < s2.size()) cout << s2 << endl;
}
return 0;
}
练习 3.5
#include
#include
using namespace std;
int main()
{
}
string strPart,strTotal;
while(cin >> strPart){
strTotal += strPart + " ";
}
cout << strTotal << endl;
return 0;
P86
练习 3.6/3.7/3.8
#include "stdafx.h"
#include
#include
using namespace std;
int main()
{
string s;
cin >> s;
//使用范围 for 语句
for (auto &c : s) {
c = 'X';
}
cout << s << endl;
for (char &c : s) {
c = 'X';
}
cout << s << endl;
//使用下标迭代
for (decltype(s.size()) index = 0; index != s.size(); ++index) {
s[index] = 'X';
}
cout << s << endl;
return 0;
}
练习 3.10
#include "stdafx.h"
#include
#include
using namespace std;
int main()
{
string s;
getline(cin, s);
for (decltype(s.size()) i = 0; i != s.size(); ++i) {
if (!ispunct(s[i])) cout << s[i];//如果不是标点符号,就输出
}
cout << endl;
return 0;
}
P90
练习 3.13(验证)
#include "stdafx.h"
#include
#include
#include
using namespace std;
int main()
{
vector v1;
vector v2(10);
vector v3(10, 42);
vector v4{ 10 };
vector v5{ 10,42 };
vector v6{ 10 };
vector v7{ 10,"hi" };
cout << v1.size() << endl;
for (int i = 0; i != v1.size();++i) {
cout << v1[i] << " ";
}
cout << endl;
cout << v2.size() << endl;
for (int i = 0; i != v2.size(); ++i) {
cout << v2[i] << " ";
}
cout << endl;
cout << v3.size() << endl;
for (int i = 0; i != v3.size(); ++i) {
cout << v3[i] <<" ";
}
cout << endl;
cout << v4.size() << endl;
for (int i = 0; i != v4.size(); ++i) {
cout << v4[i] << " ";
}
cout << endl;
cout << v5.size() << endl;
for (int i = 0; i != v5.size(); ++i) {
cout << v5[i] << " ";
}
cout << endl;
cout << v6.size() << endl;
for (int i = 0; i != v6.size(); ++i) {
cout << v6[i] << " ";
}
cout << endl;
cout << v7.size() << endl;
for (int i = 0; i != v7.size(); ++i) {
cout << v7[i] << " ";
}
cout << endl;
return 0;
}
输出为: