練習 3.43:編寫3個不同版本的程式,令其均能輸出ia的元素。版本1使用範圍 for 語句管理迭代過程;版本 2 和版本 3 都使用普通的 for 語句,其中版本 2 要求下標運算子,版本 3 要求用指標。此外,在所有 3 個版本中都要直接寫出資料型別,而不能使用型別別名、auto 關鍵字或 decltype 關鍵字。
// ex_43.cc
#include
intmain()
; std::cout <<
"use range for: "
<< std::endl;
// use range for
for(
int(
&p)[4]
: ia)
std::cout << std::endl;
}// use ordinary for and subscripts:
std::cout <<
"\nuse ordinary for and subscripts: "
<< std::endl;
for(size_t i =
0; i !=3;
++i)
std::cout << std::endl;
}// use ordinary for and pointers:
std::cout <<
"\nuse ordinary for and pointers: "
<< std::endl;
for(
int(
*p)[4]
= ia; p != ia +3;
++p)
std::cout << std::endl;
}return0;
}
$ ./ex_43.out
use range for:
32 44 83 64
78 21 49 55
64 40 82 27
use ordinary for and subscripts:
32 44 83 64
78 21 49 55
64 40 82 27
use ordinary for and pointers:
32 44 83 64
78 21 49 55
64 40 82 27
練習 3.44:改寫上乙個練習中的程式,使用型別別名來代替迴圈控制變數的型別。
// ex_44.cc
#include
intmain()
;typedef
int(
&ref_iarr)[4
];using int_arr =
int[4]
;using idx = size_t;
// use range for:
std::cout <<
"range for: "
<< std::endl;
for(ref_iarr row : ia)
std::cout << std::endl;
}// use ordinary for and subscripts:
std::cout <<
"\nordinary for and subscripts: "
<< std::endl;
for(idx i =
0; i !=3;
++i)
std::cout << std::endl;
}// use ordinary for and pointers:
std::cout <<
"\nordinary for and pointers: "
<< std::endl;
for(int_arr *row = std::
begin
(ia)
; row != std::
end(ia)
;++row)
std::cout << std::endl;
}return0;
}
$ ./ex_44.out
range for:
32 44 83 64
78 21 49 55
64 40 82 27
ordinary for and subscripts:
32 44 83 64
78 21 49 55
64 40 82 27
ordinary for and pointers:
32 44 83 64
78 21 49 55
64 40 82 27
練習 3.45:再一次改寫程式,這次使用 auto 關鍵字。
// ex_45.cc
#include
intmain()
; std::cout <<
"range for: "
<< std::endl;
for(
auto
&row : ia)
std::cout << std::endl;
}// std::cout << "\nordinary for and subscripts: " << std::endl;
std::cout <<
"\nordinary for and pointers: "
<< std::endl;
for(
auto row = std::
begin
(ia)
; row != std::
end(ia)
;++row)
std::cout << std::endl;
}return0;
}
$ ./ex_45.out
range for:
32 44 83 64
78 21 49 55
64 40 82 27
ordinary for and pointers:
32 44 83 64
78 21 49 55
64 40 82 27
c primer第16章課後習題答案
1.練習16.1 當我們呼叫template時,編譯器會根據函式實參的型別推斷模板實參,從而確定最匹配的繫結到模板引數t的 型別,之後編譯器用推斷出得模板引數來例項化乙個特定函式的版本,這個過程就叫做例項化。2.練習16.2 模板函式在.件中定義 ifndef template compare h ...
C Primer 課後習題第一章
重新開始 要加油,加油,加油啊!黃鵬宇.我一定會找到工作的.fight!本門部分答案參考於 c primer 習題集 visual studio 官方文件如下 c 程式 字尾 cpp c程式 字尾 c 標頭檔案 h includeint main void 不合法 的前面沒有表示式 修改方法之一 只...
C Primer 課後習題第八章
第一章 第二章第三章 第四章第五章 第六章第七章 include includeusing namespace std istream f istream in in.close 輸入完畢,關閉檔案 vector const iterator it words.begin 迭代器 while it ...