collectionに関するdotsargのブックマーク (15)

  • 【C++】デフォルトコンストラクタを持たない型の配列を初期化する - Bite Code

    class X { public: explicit X(int) {} }; 上のような、デフォルトコンストラクタのないクラスについて考えてみます。 このようなクラスのオブジェクトは、明示的にコンストラクタを呼ばなければ生成できません。 X x1; // NG X x2(99); // OK X xarray1[3]; // NG X xarray2[3] = { X(10), X(20), X(30) // OK }; C++03 までは、こういう型をクラスのメンバに配列として持ったとき*1とoperator new[]による確保をするときは、各要素に対して直接コンストラクタを呼ぶ方法がなく、デフォルトコンストラクタが必要でした。 class Y { X xarray[3]; // クラス定義だけならOK }; Y y; // NG X* px = new X[3]; // NG C+

    【C++】デフォルトコンストラクタを持たない型の配列を初期化する - Bite Code
    dotsarg
    dotsarg 2018/10/02
    デフォルトコンストラクターを持たないクラスの STL コンテナーへの追加の方法が記載されている。
  • Boost.Container stable_vector - fjnlの生存記録のような何か

    はじめに 記事は partake.in 7日目です。 stable_vector Boost 1.48からBoost.ContainerというSTL互換のコンテナライブラリが採用されました。基的にはboost::container::vectorやboost::container::stringといったSTL互換のクラスが提供されていますが、boost::container::stable_vectorのようにSTLにはない独自のコンテナも提供されています。 (以下、stable_vectorと書いた場合はboost::container::stable_vectorを、vectorと書いた時はstd::vectorを示すものとします) stable_vectorは名の示す通り(要素が)安定したvectorです。例えばvectorを用いて以下の操作を行うことを考えます。 vector<

    Boost.Container stable_vector - fjnlの生存記録のような何か
  • バッチファイルで配列を使う

    目次 一次元配列 配列に数字を格納する ファイルから文字列を格納する 二次元配列 配列に数字を格納する ファイルから文字列を格納する その他の関連しそうな記事 一次元配列 他の言語を使用している方はバッチファイルで配列を使用したいと思うかもしれません。しかし、バッチには配列という機能はありません。ただし、「配列もどき」を使うことはできます。その使用方法をここでは、解説していきます。 まずは確認ですが、配列は以下のような形をしています。 Array[0] Array[1] Array[2] Array[3] … この「Array[0]」という名前をそのまま変数名に使ってしまうことで配列を表現しようというやり方です。Array[1], Array[2]…もそれぞれそのような名前の変数であって、けして「Array」という配列に複数の値や文字列を格納するわけではありません。なので、「もどき」です。

    バッチファイルで配列を使う
    dotsarg
    dotsarg 2018/07/20
    バッチファイルにおいて疑似配列を使用する方法が掲載されている。
  • c++11っぽくstd::vectorでindexをfindしたい | ヤマヤタケシのブログ

    こんにちは。ヤマヤタケシです。 やっぱりC++だね! c++11っぽくstd::vectorでindexをfindしたい! ルー大柴か! さて、配列の中の要素を探すという、基的なことだからこそ、STLっぽくやりたい! 今回、欲しいのは配列の番号であり、値じゃない。 しかし、std::findで探せるのはiteratorだから、しょうがなくこう書きました。 int findIndex( int value ) { size_t len = m_array.size(); for( size_t n = 0 ; n < len ; ++n ){ if( m_array[ n ] == value ){ return n; } } return -1; } これはもはやC言語と同じだ! C++っぽくないぜよ? 改めて検索すると、さすが世界のStackoverflowですね。 良い答えがありまし

  • コレクション内での比較と並べ替え - .NET

    System.Collections クラスは、削除する要素を検索するか、キーと値のペアの値を返すかに関係なく、コレクションの管理に関連するほぼすべての処理において比較を実行します。 通常、コレクションは等値比較子か順序比較子、またはその両方を使用します。 比較には 2 つのコンストラクターが使用されます。 等しいかどうかの確認 Contains、 IndexOf、 LastIndexOf、 Remove などのメソッドは、コレクション要素に対して等値比較子を使用します。 コレクションがジェネリックの場合、次のガイドラインに従ってアイテムの等価性が比較されます。 T 型で IEquatable<T> ジェネリック インターフェイスが実装されている場合、等値比較子はそのインターフェイスの Equals メソッドです。 T 型で IEquatable<T>が実装されていない場合、 Object

    コレクション内での比較と並べ替え - .NET
  • Immutableなモノたち - Qiita

    どーいうことだってばよ? 2016/07/26は雨が降って、自転車に乗れなかったのでむしゃくしゃしてやった。後悔はしていない。 System.Collections.Immutableを簡単にまとめていこうかなって。 どこから取れるの? System.Collections.Immutable このあたりから落としてくれば良いかと。ただ、VisualStudio使ってるなら、Nugetでさくっと落としてきた方が楽です、えぇ。 Mutableなモノたち 普段、一般的に使っているList<T>や、配列はImmutableでは無いので、以下のような操作をした結果、操作したインスタンスの状態が変化する。 using System; using System.Collections.Generic; namespace ConsoleApplication1 { class Program { st

    Immutableなモノたち - Qiita
    dotsarg
    dotsarg 2017/08/17
    C# で変更不可能なコレクションを実現するクラス。
  • 汎用ジェネリックコレクション その2 ObservableCollection/ReadOnlyObservableCollection (System.Collections.ObjectModel) - smdn.jp

    汎用ジェネリックコレクション ページ一覧汎用ジェネリックコレクション汎用ジェネリックコレクション(1) Collection/ReadOnlyCollection汎用ジェネリックコレクション(2) ObservableCollection/ReadOnlyObservableCollection汎用ジェネリックコレクション(3) KeyedCollection System.Collections.ObjectModel.ObservableCollectionクラスは、コレクションに対する挿入・削除・設定を行った際にそれらの変更をクラス外部にイベントとして通知することができるようになっているクラスです。 ObservableCollectionクラスは、ユーザーインターフェイスとコレクションの同期したい場合などに使用されます。 ObservableCollectionクラス自体はColl

    汎用ジェネリックコレクション その2 ObservableCollection/ReadOnlyObservableCollection (System.Collections.ObjectModel) - smdn.jp
  • Pasture | assignment - operator+=, operator(), repeat

    Assignment ライブラリの続き。 list_of, map_list_of の他にいつくか関数がある。 ひとつは operator+=()。 以下のようにすれば連続する要素をコンテナに代入でなく追加する。 using namespace boost::assign; // operator+=()を有効にする std::vector<int> v; v += 4,5,6; // 末尾に 4,5,6の3要素を追加 上のサンプルにもあるが、operator+=() は boost::assign名前空間で 定義されているので、使用するには using が必要。 また、コンマ演算子もオーバーロードされていて、普通のコンマ演算子とは引数の評価順が変わってしまうので、混乱を招くかもしれない。 個人的にはあまり好きじゃない記法だ。 operator+=() と同様の機能を operator()

  • boost::fusion::vectorで異なる型のコンテナ - C++と色々

    動的な多態性を持った型のオブジェクトをコンテナで扱いたい場合、基クラスの参照型または基クラスのポインタ型のコンテナを使うことができます: #include <iostream> #include <memory> #include <vector> struct A { void disp() const { do_disp(); } private: virtual void do_disp() const = 0; }; class B : public A { void do_disp() const override { std::cout << "B\n"; } }; int main() { std::vector<std::shared_ptr<A>> v; v.emplace_back(std::make_shared<B>()); for (auto const& a

    boost::fusion::vectorで異なる型のコンテナ - C++と色々
  • コンテナの要素位置を移動する - Faith and Brave - C++で遊ぼう

    ちょっと必要になったので、書いてみました。 vector中のbefore番目にある要素を、after番目に移動します。 #include <vector> #include <utility> // 要素の位置を移動させる template <class T> void move_position(std::vector<T>& v, std::size_t before, std::size_t after) { T x = std::move(v[before]); v.erase(v.begin() + before); v.insert(v.begin() + after, std::move(x)); } #include <boost/detail/lightweight_test.hpp> #include <boost/range/algorithm/equal.hpp>

    コンテナの要素位置を移動する - Faith and Brave - C++で遊ぼう
  • P-Stade C++ Libraries

    Ketchup The Replacement for BEGIN_MSG_MAP of ATL/WTL using Class Templates

  • How to call erase with a reverse iterator

    I am trying to do something like this: for ( std::list< Cursor::Enum >::reverse_iterator i = m_CursorStack.rbegin(); i != m_CursorStack.rend(); ++i ) { if ( *i == pCursor ) { m_CursorStack.erase( i ); break; } } However erase takes an iterator and not a reverse iterator. is there a way to convert a reverse iterator to a regular iterator or another way to remove this element from the list?

    How to call erase with a reverse iterator
    dotsarg
    dotsarg 2015/04/21
    std::reverse_iterator の削除方法が掲載されている。
  • boost::assignでコンテナに要素を追加するコードを簡潔に記述する

    boost::assignを使うと、コンテナに要素を追加するコードを簡潔に記述することができます。 必要なヘッダ #include <boost/assign.hpp> 一般的にstd::vectorに要素を追加するには、push_backを繰り返し使います。 std::vector<int> v; v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4); v.push_back(5); boost::assignを使うと、次にように簡潔に書くことができます。 using namespace boost::assign; std::vector<int> v; v += 1,2,3,4,5; 同様に、std::mapへの要素の追加は次のように書くことができます。 using namespace boost::assign

    boost::assignでコンテナに要素を追加するコードを簡潔に記述する
  • 自作クラスのEqualsメソッドをオーバーライドして、等価の定義を変更する

    自作クラスのEqualsメソッドをオーバーライドして、等価の定義を変更するEqualsメソッドは、2つのオブジェクトが等しいかを判断するために使われ、等しければtrueを、そうでなければfalseを返します。例えば、Array.IndexOfメソッドはEqualsメソッドがtrueを返す要素を探しています。ここでは、自作クラスを作成するときにEqualsメソッドをオーバーライドする方法を説明します。 ですがその前に確認に意味で、Equalsメソッドをオーバーライドしなかった時の既定の動作について説明します。(分かっているという方は読み飛ばしてください。) 参照型のEqualsメソッドの既定の動作まずは、Equalsメソッドをオーバーライドしない次のようなクラスを定義してみます。

    自作クラスのEqualsメソッドをオーバーライドして、等価の定義を変更する
  • 2つの配列(またはコレクション)を比較して、等しいか調べる

    2つの配列(またはコレクション)を比較して、等しいか調べるここでは、2つの配列(またはコレクション)を比べて、両者の要素がすべて同じか調べる方法を紹介します。 For文を使用する方法まず思いつくのは、For文を使って1つ1つの要素が等しいかを調べる方法です。例えば、以下のような方法です。 '比較する2つの配列 Dim ary1 As String() = New String() {"いち", "に", "さん"} Dim ary2 As String() = New String() {"いち", "に", "さん"} '結果を格納する変数 Dim isEqual As Boolean = True If Object.ReferenceEquals(ary1, ary2) Then '同一のインスタンスの時は、同じとする isEqual = True ElseIf ary1 Is No

    2つの配列(またはコレクション)を比較して、等しいか調べる
  • 1