6-3
#include<iostream>
//#include<vector>
//#include<string>
//#include<cctype>
//#include<iterator>
//#include<stdexcept>
using namespace std;
int fact(int d);
int main(int argc, char*argv[])
{
cout << fact(5) << endl;
system("pause");
return 0;
}
int fact(int d) {
int result = 1;
while (d > 1) {
result *= d--;
}
return result;
}
6-4
#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>
using namespace std;
void fact();
int main(int argc, char*argv[])
{
fact();
system("pause");
return 0;
}
void fact() {
int result = 1;
int d;
cout << "please input an integer:";
cin >> d;
while (d > 1) {
result *= d--;
}
cout << result << endl;
}
6-5
#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>
using namespace std;
int abs(int i);
int main(int argc, char*argv[])
{
int i;
cout << "please input an integer:";
cin >> i;
cout << abs(i) << endl;
system("pause");
return 0;
}
int abs(int i)
{
return (i >= 0) ? i : -i;
}
6-7
#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>
using namespace std;
int callCount();
int main(int argc, char*argv[])
{
for (int i = 0; i < 10; i++) {
cout << callCount() << endl;
}
system("pause");
return 0;
}
int callCount()
{
static int count = 0;
return count++;
}
6-10
#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>
using namespace std;
void swap(int *, int*);
int main(int argc, char*argv[])
{
int i = 5, j = 10;
swap(i, j);
cout << i << " " << j << endl;
system("pause");
return 0;
}
void swap(int *p1, int *p2)
{
int tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
6-11
#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>
using namespace std;
void reset(int &i);
int main(int argc, char*argv[])
{
int i = 100;
reset(i);
cout << i << endl;
system("pause");
return 0;
}
void reset(int &i)
{
i = 0;
}
6-12
#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>
using namespace std;
void swap(int &i, int &j);
int main(int argc, char*argv[])
{
int i = 5, j = 10;
swap(i, j);
cout << i << " " << j << endl;
system("pause");
return 0;
}
void swap(int &i, int&j)
{
int tmp = i;
i = j;
j = tmp;
}
6-17
#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>
using namespace std;
int hasUpper(const string &s);
void toLower(string &s);
int main(int argc, char*argv[])
{
string s("Hello, World!");
toLower(s);
cout << "转换为小写:" << s << endl;
cout << hasUpper(s) << endl;
cout << hasUpper("hellOworld") << endl;
system("pause");
return 0;
}
int hasUpper(const string &s)
{
for (auto it = s.begin(); it != s.end(); it++) {
if (isupper(*it)) {
return it - s.begin();
}
}
return -1;
}
void toLower(string &s) {
for (auto &ch : s) {
ch = tolower(ch);
}
}
6-21
#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>
using namespace std;
int cmp(int a, const int *b);
int main(int argc, char*argv[])
{
int i = 5, j = 10, *p = &i;
int res = cmp(j, p);
cout << res << endl;
system("pause");
return 0;
}
int cmp(int a, const int *b)
{
return((a > *b) ? a : *b);
}
6-22
#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>
using namespace std;
void swap1(const int *p, const int *q);
void swap2(int *p, int *q);
void swap3(int *(&p), int *(&q));
int main(int argc, char*argv[])
{
int i = 10, j = 20;
//p指向i,q指向j
int *p = &i, *q = &j;
cout << "初始情况" << endl;
cout << i << " " << j << endl;
cout << p << " " << q << endl;
swap1(p, q);
cout << "交换指针形参" << endl;
cout << i << " " << j << endl;
cout << p << " " << q << endl;
swap2(p, q);
cout << "交换指针指向的变量" << endl;
cout << i << " " << j << endl;
cout << p << " " << q << endl;
swap3(p, q);
cout << "通过引用交换指针" << endl;
cout << i << " " << j << endl;
cout << p << " " << q << endl;
system("pause");
return 0;
}
//这个函数没什么用
void swap1(const int *p, const int *q)
{
const int *tmp = q;
q = p;
p = tmp;
}
//交换两个指针指向的int变量
void swap2(int *p, int *q)
{
int tmp = *q;
*q = *p;
*p = tmp;
}
//通过指针引用交换两个指针
void swap3(int *(&p), int *(&q))
{
int *tmp = q;
q = p;
p = tmp;
}
6-23
#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>
using namespace std;
void print1(const int *p);
void print2(const int *begin, const int *end);
void print3(const int *p, const int size);
int main(int argc, char*argv[])
{
int i = 0;
int j[2] = { 0, 1 };
print1(&i);
print2(begin(j),end(j));
print3(j, end(j) - begin(j));
system("pause");
return 0;
}
void print1(const int *p)
{
cout << *p << endl;
}
void print2(const int *begin, const int *end)
{
while (begin != end)
cout << *(begin++) << endl;
}
void print3(const int *p, const int size)
{
const int *begin = p;
while (p != begin + size)
cout << *(p++) << endl;
}
6-25
#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>
using namespace std;
int main(int argc, char*argv[])
{
string str;
for (int i = 1; i < argc; i++) {
str += argv[i];
}
cout << str << endl;
system("pause");
return 0;
}
6-26
#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>
using namespace std;
int main(int argc, char*argv[])
{
for (int i = 0; i < argc; i++) {
cout << "argv[" << i << "]" <<" = "<< argv[i] << endl;
}
system("pause");
return 0;
}
6-27
#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>
#include<initializer_list>
using namespace std;
void sum(const initializer_list<int> &list);
int main(int argc, char*argv[])
{
sum({1,2,3,4,5});
system("pause");
return 0;
}
void sum(const initializer_list<int> &list)
{
int sum = 0;
for (auto e:list) {
sum += e;
}
cout <<"sum is "<< sum << endl;
}
6-33
#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>
using namespace std;
void print_vector(const vector<int> &v, unsigned int index);
int main(int argc, char*argv[])
{
vector<int> v = { 1,2,3,4,5 };
print_vector(v, 0);
system("pause");
return 0;
}
void print_vector(const vector<int> &v, unsigned int index)
{
if (!v.empty() and index < v.size()) {
cout << v[index] << endl;
print_vector(v, index + 1);
}
}
6-37
#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>
using namespace std;
//定义一个接受并返回数组引用的函数,什么都不做
int(&func(int(&arr)[3]))[3]
{
return arr;
}
//通过别名简化
using arrayRef = int(&)[3];
typedef int(&arrRef)[3];
arrayRef func1(arrRef arr) {
return arr;
}
//尾置返回
auto func2(int (&arr)[3])->int(&)[3]
{
return arr;
}
int main(int argc, char*argv[])
{
int array[3] = { 0, 1, 2 };
func(array);
func1(array);
func2(array);
system("pause");
return 0;
}
6-38
#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>
using namespace std;
int odd[] = { 1, 3, 5, 7, 9 };
int even[] = { 0, 2, 4, 6, 8 };
decltype(odd) &arrPtr(int i)
{
return (i % 2) ? odd : even;
}
int main(int argc, char*argv[])
{
arrPtr(5);
system("pause");
return 0;
}
6-42
#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>
using namespace std;
string make_plural(int ctrl, const string &word, const string &ending = "s");
int main(int argc, char*argv[])
{
cout << make_plural(2, "fish", "es") << endl;
cout << make_plural(2, "rule") << endl;
system("pause");
return 0;
}
string make_plural(int ctrl, const string &word, const string &ending)
{
return (ctrl > 1) ? word + ending : word;
}
6-44
#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>
using namespace std;
int abs(int i);
int main(int argc, char*argv[])
{
int i;
cout << "please input an integer:";
cin >> i;
cout << abs(i) << endl;
system("pause");
return 0;
}
int abs(int i)
{
return (i >= 0) ? i : -i;
}
6-56
#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>
using namespace std;
int add(int a, int b)
{
return a + b;
}
int fminus(int a, int b)
{
return a - b;
}
int multiply(int a, int b)
{
return a * b;
}
int divide(int a, int b)
{
return a / b;
}
int main(int argc, char*argv[])
{
int(*pfadd)(int, int) = add;
int(*pfminus)(int, int) = fminus;
int(*pfmul)(int, int) = multiply;
int(*pfdiv)(int, int) = divide;
vector<int(*)(int, int)> vf;
vf.push_back(pfadd);
vf.push_back(pfminus);
vf.push_back(pfmul);
vf.push_back(pfdiv);
for (auto fp : vf) {
cout << fp(10, 5) << endl;
}
system("pause");
return 0;
}