2015-05-01から1ヶ月間の記事一覧

gdbでvectorなどの中身をprintする

C++

gdbでvectorなどSTLのコンテナの中身をprintしようとすると、例えば以下のようにうまく表示できません。 (gdb) p x1 $1 = {<std::_Vector_base<int, std::allocator<int> >> = { _M_impl = {<std::allocator<int>> = {<__gnu_cxx::new_allocator<int>> = {<No data fields>}, <No data fields>}, _M_start = 0x8003b9e8, _M_finish = 0x8003b9fc, _M_end_of_storage …</no></no></__gnu_cxx::new_allocator<int></std::allocator<int></std::_vector_base<int,>

C++11で、std::tie()を使って複数の変数への代入を1行で行う

C++

スクリプト言語だと、複数の変数への代入を1行で行えることが多いです。以下はPythonの例。 a,b,c = 10, 7.7, "hello" print(a,b,c) これと同じことをC++11でも行うには、std::tie()を使います。 #include <iostream> #include <tuple> using namespace std; int main(){ int </tuple></iostream>…

重複組合せの復習

例えば「区別のないK個の玉を、区別のあるN人に分配する組み合わせ」のように、区別のないものを区別のあるものに分配する組み合わせを重複組合せと呼びます。 重複組合せは以下の記号で定義されます。 重複組合せは、を使って以下のように表せることが知ら…

lower_bound(), upper_bound()の練習帳

C++

事前準備 数列は昇順にソートされている必要があります。 #include <iostream> #include <algorithm> int main() { std::vector<int> nums{1,1,1,1,2,2,3,3,3,4,4,6,6,6}; std::sort(nums.begin(), nums.end()); .... } 要素の数を数える 「3より小さい要素数」「3以下の要素数」を数え</int></algorithm></iostream>…