###解決!
サイズを指定しない場合は宣言と同時に初期化しないとならないので、
今回のケースでは配列は固定長なので使えない
が結論です。
@asmさんの回答でスッキリしました!
回答やコメントくださった方ありがとうございました。
いわゆる配列の初歩的な作法から調べ直してみたいと想います。
###変更後
課題の趣旨から外れそうなので**配列[最大要素数を指定]**にしてみます。
std::vectorが便利過ぎて慣れてしまっているので思わぬ落とし穴でした。
C++
1#include <bits/stdc++.h> 2 3class CBTree 4{ 5 public: 6 // 配列[]は初期化時に要素数を指定しておかなければならないので、 7 // 出題に合わせて最大サイズを指定するしか無い。 8 9 int heap[251]; 10 CBTree() 11 { 12 heap[0] = -2000000001;//最小値-1 13 } 14}; 15 16void alds1_9_1() 17{ 18 // 完全二分木 19 // Complete binary tree 20 int n, key; 21 std::cin >> n; 22 CBTree T; 23 24 //入力 25 for (int i = 1; i <= n; ++i) 26 { 27 std::cin >> T.heap[i]; 28 } 29 30 //確認出力 31 for (int i = 1; i <= n; ++i) 32 { 33 std::cout << T.heap[i] << std::endl; 34 } 35} 36 37int main() 38{ 39 alds1_9_1(); 40 getchar(); 41 return 0; 42} 43 44// 5 45// 7 8 1 2 3 46// 7 47// 8 48// 1 49// 2 50// 3 51
###追記(説明補足)
例えばこういう配列の使い方をイメージしています。
std::vectorやpythonなどの配列の宣言の仕方ですんなり使えると思っていたのにのっけから躓いてしまっています^^;
配列の初歩的なことから調べ直してみます。
###知りたいこと
クラス内に定義した配列に数値を代入しそのまま出力したいだけなのですが、
あまりにもシンプルなだけに何が間違っているのか分からず困っています。
とても初歩的なミスだと思うのですがご教示頂けると助かります。
###現状
配列に数値を代入し出力するだけなのに期待していない値が出力されている。
###サンプルコード
C++
1#include <bits/stdc++.h> 2 3class CBTree 4{ 5 private: 6 size_t max_size; 7 8 public: 9 int heap[]; 10 CBTree(size_t max_size) 11 { 12 CBTree::max_size = max_size; 13 heap[CBTree::max_size] = {0}; 14 heap[0] = -2000000001; 15 } 16}; 17 18void alds1_9_1() 19{ 20 // 完全二分木 21 // Complete binary tree 22 int n, key; 23 std::cin >> n; 24 CBTree T(n); 25 26 //入力 27 for (int i = 1; i <= n; ++i) 28 { 29 std::cin >> key; 30 T.heap[i] = key; 31 } 32 33 //確認出力 34 for (int i = 1; i <= n; ++i) 35 { 36 std::cout << T.heap[i] << std::endl; 37 } 38} 39 40int main() 41{ 42 alds1_9_1(); 43 getchar(); 44 return 0; 45} 46
//入力例 5 7 8 1 2 3 //出力例(期待) 7 8 1 2 3 //出力(現状) 0 0 0 24 0
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/11 09:39
2018/11/11 09:45
2018/11/11 09:53
2018/11/11 10:00
2018/11/11 10:12
2018/11/11 19:01