C Primer 課後習題 3 6

2021-09-11 07:15:26 字數 3216 閱讀 7301

練習 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 ...