Accelerated C++ 第3章
vector
Cの配列よりは使いやすいコンテナクラス。
サイズに拡張に伴うメモリ割付などを面倒みてくれるが、組み込み機器で使うのはどうなんだろうか。実メモリシステムだとフラグメンテーションが怖い。(といいつつまだ遭遇したことはないわけだけど)
3.2.3 追加コメント
結局、homework.size() が0のとき、midも0になってhomework[mid - 1]のmid-1が符号なしの大きな数になることを言いたいんだろけど、ちょっと回りくどい。
課題
3-0
やってみた。
3-1
メジアンの計算は、全データ入力後にソートし、順番として中央のデータを取り出すことになる。
よって既に読み込んだデータが保存されていないと、そもそもソートができない。
3-2
こんな感じ。
#include <iostream> #include <vector> #include <algorithm> int main() { // データ読み込み std::vector<int> v; int data; while (std::cin >> data) { v.push_back(data); } // ソート std::sort(v.begin(), v.end()); // 数のチェック if (v.size() < 4) { std::cout << "データ数が" << v.size() << "のため、クオータイルを求められない" << std::endl; return 1; } std::vector<int>::size_type size = v.size() / 4; int index = v.size() - 1; for (int i = 0; i < 4; ++i) { std::cout << std::endl << "group: "; for (int j = 0; j < size; ++j) { std::cout << " " << v[index--]; } } while (index >= 0) { std::cout << " " << v[index--]; } std::cout << std::endl; return 0; }
降順にソートする方が自然だと思うけど、それには greater
#include <iostream> #include <vector> #include <algorithm> #include <functional> // greater<int>に必要 int main() { // データ読み込み std::vector<int> v; int data; while (std::cin >> data) { v.push_back(data); } // ソート std::sort(v.begin(), v.end(), std::greater<int>()); // 数のチェック if (v.size() < 4) { std::cout << "データ数が" << v.size() << "のため、クオータイルを求められない" << std::endl; return 1; } std::vector<int>::size_type size = v.size() / 4; int index = 0; for (int i = 0; i < 4; ++i) { std::cout << std::endl << "group: "; for (int j = 0; j < size; ++j) { std::cout << " " << v[index++]; } } while (index < v.size()) { std::cout << " " << v[index++]; } std::cout << std::endl; return 0; }
あとは明日。。