もうすでにN人がN回言ってる有名な話なのですが改めて。 結論 よく分からないならusing namespace std;を使わない あとこれは難しいかもしれませんが、エラーの中から英語っぽいのを探して検索を掛けましょう。ほぼ100%解決策が出てきます。 あと「よく分からないなら using namespace std; を使わない」は100回くらい復唱しましょう— Az (@azaika_) 2017年4月23日 using namespace std;とは #include <iostream> int main() { std::cout << "arikitari_na_sekai" << std::endl; } こういうコードでstd::を書きたくないというときに #include <iostream> using namespace std; int main() { cout
unordered_map で辛い思いをしたので twitter でわーわー言ってたらいろいろ勉強になったのでメモします。 まとめ 基本的にチェイン法っていうのでやってるっぽい vector< list< T > > みたいのをイメージするとわかりやすい 詳細 まとめで書いたように, 基本的には vector< list< T > > というのが全部説明している気がします。 find() は平均計算量 O(1), 最悪計算量 O(n) find() は, 基本的にはハッシュ値で vector にランダムアクセスするだけで目的のものが見つかるので O(1) だが, ハッシュ値がかぶっているものがあると, vector の要素のリストを線形探索しないといけない。なので最悪 O(n) insert(), delete() も平均計算量 O(1), 最悪計算量 O(n) 結局消す, 入れる場所を探
==23525== Invalid free() / delete / delete[] / realloc() ==23525== at 0x1000089DF: free (in /usr/local/Cellar/valgrind/HEAD/lib/valgrind/vgpreload_memcheck-amd64-darwin.so) ==23525== by 0x100000F4F: main (sample.c:8) ==23525== Address 0x10081f510 is 0 bytes inside a block of size 4 free'd ==23525== at 0x1000089DF: free (in /usr/local/Cellar/valgrind/HEAD/lib/valgrind/vgpreload_memcheck-amd64-darwi
-D_GLIBCXX_DEBUGを付けて以下のコードを実行するとアサートにひっかかります(https://stackoverflow.com/questions/13129031/on-implementing-stdswap-in-terms-of-move-assignment-and-move-constructor)。 struct S { vector<int> a; } S s; swap(s, s); どうやらswap内部でs = std::move(s)が発生し、これがヤバイっぽい(UBを引き起す?)です。 競技プログラミングにおいては、ランダムな並び換え(これはshuffle使えばいいけど)や、ガウスの掃き出し法などでswap(s, s)を使うことが多いと思います。 対策1 swap(s, s)をしないようにする。 対策2 UBと言ってもどうせ動くのでアサート自体を無効化
3次元配列に対するポインタはどうやって作ればいいのでしょうか? 例えば char A[5][7][9] ={0}; に対するポインタはどう表記して、どのように値を格納すればいいのでしょうか? 分かる方いたら教えてください すみません、今規約を読んできました。 どうやら最悪な聞き方をしていたようで… [1] 質問文 [1.1] 自分が今行いたい事は何か 三次元配列に対するポインタを造りたい。 [1.2] どのように取り組んだか(プログラムコードがある場合記載) code #include <stdio.h> int main(void){ int *pass[406]; int D[201][201][4]; pass = D; return 0; } /code [1.3] どのようなエラーやトラブルで困っているか(エラーメッセージが解る場合は記載) a.c: In function `m
このページはC++11に採用された言語機能の変更を解説しています。 のちのC++規格でさらに変更される場合があるため関連項目を参照してください。 概要 「可変引数テンプレート (variadic templates)」は、任意の型とそのオブジェクトを任意の数だけ受け取る機能である。これによって、「最大でN個のパラメータを受け取る関数テンプレートやクラステンプレート」を実装する際に、N個のオーバーロードをユーザーが用意する必要なく、ひとつの実装だけで済むようになる。 可変引数テンプレートとしてテンプレートパラメータを受け取る場合、テンプレートパラメータを宣言するclassまたはtypenameとテンプレートパラメータの間に、省略記号 ... を入力する: // 0個以上のテンプレートパラメータを受け取る template <class... Args> struct X; // 0個以上の任
いや,デバッガ使えよ ← Kobitoからの投稿テストも兼ねて. 仕様 1. メッセージは標準エラー出力に出す なんとなく標準出力じゃねーだろと思った. fprintf( stderr, ... )で実装する. 2. コンパイル時に-D NDEBUGで何もしないようにする リリース時を考えて,何もしないようにする機能が欲しかった. -D NDEBUGにしたのは,assert()と一緒に使えばいいと思ったから. 3. printfらしく使いたい つまり,フォーマット指定子を使いたい. となれば,必然的に可変長引数を扱える必要がある. 4. 表示メッセージに行番号とか入れたい デバッグに使うものですからね. 最低限【ファイル名】と【行番号】は欲しい. この場合,マクロで定義する必要がある. [日付] ファイル名:行番号 # メッセージとかイイネ! 5. C99規格準拠 仕様3および4より. C
C++11のstd::swapは、だいぶ大きく変更された。C++03までのswapは、<algorithm>にあり、CopyConstructibleかつAssignable(C++11のCopyAssignableに相当)を要求した。ところが、C++11では、<utility>に移されたあげく、MoveConstructibleかつMoveAssignableを要求するようになった。まるっきり別物になってしまっているのだ。果たして問題を起こさないものだろうか。おぼつかないものだ。 実装例は以下のようになる。 // C++03のswap template < typename T > void swap( T & a, T & b ) { T temp = a ; a = b ; b = temp ; } // C++11のswap template < typename T > void
汎整数型(論理型(bool),文字型(charなど),整数型(intやlongなど))と浮動小数点型を合わせて算術型といい,算術型とvoid型を合わせて基本型といいます。基本型からは「ポインタ型」「配列型」「参照型」の3種類の組込み型が得られますが,この記事ではその中でも特に(単なる基本型へのポインタ型,配列型,参照型を除いた)2重以上のポインタ型,配列型,参照型の扱い方について説明します。constについては説明しません。templateについては説明しません。変数の型だけを見るので,変数名は全てハンガリアン記法の接頭辞のみとします。 まずCにあるポインタ型と配列型から先に説明します。 int i; iはint型です。関数hoge(int)を宣言しておくと,hoge(i)でhoge(int)が呼び出されます。 intに*,[1],[2]を付けるとそれぞれ次の型が得られます。 int *p
doctest is a new C++ testing framework but is by far the fastest both in compile times (by orders of magnitude) and runtime compared to other feature-rich alternatives. It brings the ability of compiled languages such as D / Rust / Nim to have tests written directly in the production code thanks to a fast, transparent and flexible test runner with a clean interface. The framework is and will stay
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く