5/12 配列ベースのリスト(Array-Based Lists)(3), 連結リスト(Linked Lists)


質問と回答

Q.
array.hの初期化について質問です。 たとえば、
ods::array<int> arr(4);
と宣言すると、arrという要素数4の配列が確保されますが、 配列要素の初期化はどこで行われているのでしょうか。 全要素が0で初期化されているようなので 気になりました。
A.
template<class T>
array<T>::array(int len, T init) {
	length = len;
	a = new T[length];
	for (int i = 0; i < length; i++)
		a[i] = init;
}
a = new T[length];
の行で,領域が確保されるのですが,C++言語では配列を確保する時はデフォルトコンストラクタ(引数をとらない コンストラクタ)が呼ばれます.以下の例では,
------
#include <iostream>

class A{
public:
  A() {
    std::cerr << "A() is called" << std::endl;
  }
};

int main(){
  A b[10];
  return 0;
}
-------
[実行例]

bash-3.2$ g++ t.cc
bash-3.2$ ./a.out
A() is called
A() is called
A() is called
A() is called
A() is called
A() is called
A() is called
A() is called
A() is called
A() is called
----------
となりますね.intのデフォルト値は,
---------
int main(){
  int i=int();
  std::cerr << i << std::endl;
  return 0;
}
---------
を実行すると
0
となるように,0なので
ods::array<int> arr(4);
で確保される要素は0になります

なお,C++言語ではなくC言語の場合は配列は明示的な初期化をおこなわない限り 値は不定になります(グローバル変数の場合は0でクリアされる).C言語を使う時 は注意してください.


4/14の課題について


4/28の課題について


講義

今日の講義は教科書の2.6 RootishArrayStack: A Space-Efficient Array Stack から.

投票システム

vote.rbをダウンロードして(「リンク先のファイルを別名で保存」で,ホームフォルダの下のmis2を選択(なければ作る).".txt"を「追加しない」を選ぶ),ホームディレクトリに保存します.ドックからターミナルを起動して,
cd mis2
を済ませてから,
ruby vote.rb 選択肢番号
のように使います.
1回の講義中に1度でも投票すると出席点を加えます.1回の講義の出席点は全体の評 価の(1/100以下とします)

リンク集


演習

今回の課題