タグ付けされた質問 「vector」

ベクトルは1次元配列です。ベクトルには、整数インデックスを使用してアクセスできるコンポーネントが含まれています。一部の言語では、ベクターの作成後にアイテムの追加や削除に対応するために、ベクターのサイズが必要に応じて拡大または縮小する場合があります。グラフィック表示には 'vector-graphics'を使用します。

10
rawメモリのビューとしてstd :: vectorを使用する
私はある時点で整数の配列とサイズへの生のポインタを与える外部ライブラリを使用しています。 ここstd::vectorで、これらの値に直接アクセスして変更するために、生のポインタでアクセスするのではなく、を使用したいと思います。 ポイントを説明する人工的な例はここにあります: size_t size = 0; int * data = get_data_from_library(size); // raw data from library {5,3,2,1,4}, size gets filled in std::vector<int> v = ????; // pseudo vector to be used to access the raw data std::sort(v.begin(), v.end()); // sort raw data in place for (int i = 0; …
71 c++  c++11  vector  stdvector 


2
std :: vectorに追加するときのクラスフィールドの奇妙な動作
次の状況で、(clangおよびGCCで)非常に奇妙な動作が見つかりました。nodesクラスのインスタンスである1つの要素を持つベクトルがありますNode。次に、ベクターにnodes[0]新しい関数を追加する関数を呼び出しますNode。新しいノードが追加されると、呼び出し元オブジェクトのフィールドがリセットされます!ただし、関数が終了すると、通常の状態に戻ります。 これは最小限の再現可能な例だと思います: #include <iostream> #include <vector> using namespace std; struct Node; vector<Node> nodes; struct Node{ int X; void set(){ X = 3; cout << "Before, X = " << X << endl; nodes.push_back(Node()); cout << "After, X = " << X << endl; } }; int main() { nodes = …

6
std :: vector :: swapメソッドを使用して、C ++で2つの異なるベクトルを交換しても安全ですか?
次のコードがあるとします。 #include <iostream> #include <string> #include <vector> int main() { std::vector<std::string> First{"example", "second" , "C++" , "Hello world" }; std::vector<std::string> Second{"Hello"}; First.swap(Second); for(auto a : Second) std::cout << a << "\n"; return 0; } ベクトルがでなくstd::string、クラスであると想像してください。 std::vector<Widget> WidgetVector; std::vector<Widget2> Widget2Vector; 2つのベクトルをstd::vector::swapメソッドで交換しても安全WidgetVector.swap(Widget2Vector);ですか?それともUBにつながりますか?
30 c++  c++11  vector  stdvector  swap 

3
2つの範囲内でベクトルを降順に並べ替える
整数のベクトルがあるとしましょう: std::vector<int> indices; for (int i=0; i<15; i++) indices.push_back(i); 次に、降順に並べ替えます。 sort(indices.begin(), indices.end(), [](int first, int second) -> bool{return indices[first] > indices[second];}) for (int i=0; i<15; i++) printf("%i\n", indices[i]); これにより、以下が生成されます。 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ここで、数字3、4、5、6を最後に移動し、それらの降順を維持したいとします(できればsort2回目に使用する必要はありません)。つまり、ここに私が欲しいものがあります: 14 13 12 11 10 …

2
キーとしてのベクトルは、C ++で内部的にどのように機能しますか?
このSOの答えは、キーのベクトルを持つSTLマップ、ベクトルをキーとして使用できることを示しています。したがって、ベクターをキーとして使用する場合。キーは一意である必要があるため、実際にはどのように機能mapしますか?同じ要素を持つ別のベクターを挿入すると、要素ごとに重複した要素がないかチェックされますか、ベクターの名前が何かを指定していますか?配列の名前と同様に、ベースアドレスを表します。したがって、この場合はベースアドレスをキーとして使用できるため、配列をキーとして使用できますが、ベクトルの場合はキーは何ですか。内部ではどのように機能しますか。 ベクトルの名前を出力するとエラーになるので vector<int> v; cout<<v; //error
14 c++  arrays  dictionary  vector  stl 

1
要素を完全に転送してstd :: vectorをリスト初期化できますか?
std :: vectorの集約 リストの初期化は、移動がより適切な場合にコピーの初期化を実行することに気付きました。同時に、複数のemplace_backsが必要な処理を実行します。 テンプレート関数を書くというこの不完全な解決策しか思いつかなかったinit_emplace_vector。ただし、明示的ではない単一値コンストラクターにのみ最適です。 template <typename T, typename... Args> std::vector<T> init_emplace_vector(Args&&... args) { std::vector<T> vec; vec.reserve(sizeof...(Args)); // by suggestion from user: eerorika (vec.emplace_back(std::forward<Args>(args)), ...); // C++17 return vec; } 質問 std :: vectorをできるだけ効率的に初期化するために、本当にemplace_backを使用する必要がありますか? // an integer passed to large is actually the size of the resource std::vector<large> v_init { …


2
アトミックのベクトルの初期化
考慮してください: void foo() { std::vector<std::atomic<int>> foo(10); ... } fooの内容は有効ですか?または、明示的にループして初期化する必要がありますか?私はGodboltを確認しましたが、問題はないようですが、この点については標準が非常に混乱しているようです。 std ::ベクトルコンストラクタは、それが挿入言うデフォルトの挿入のインスタンスstd::atomic<int>は、初期化値ビア配置をnew。 値の初期化のこの効果は当てはまると思います: 2)Tがユーザー提供でも削除でもないデフォルトコンストラクターを持つクラス型(つまり、暗黙的に定義またはデフォルト化されたデフォルトコンストラクターを持つクラスである可能性がある)である場合、オブジェクトはゼロ初期化され、その後重要なデフォルトコンストラクターがある場合はdefault-initialized。 したがって、アトミックはゼロで初期化されているように思えます。だから問題は、std::atomic<int>有効なオブジェクトの結果のゼロ初期化ですか? 答えは「実際にはそうですが、実際には定義されていません」と思いますか? 注:この回答は、それがゼロで初期化されていることには同意していますが、それがオブジェクトが有効であることを意味するかどうかについては、実際には言っていません。
12 c++  vector  atomic 

3
C ++でのstd :: resize(n)とstd :: shrink_to_fitの違いは?
私はこれらの声明に出くわしました: resize(n)–「n」要素が含まれるようにコンテナのサイズを変更します。 shrink_to_fit()–サイズに合わせてコンテナの容量を減らし、容量を超えるすべての要素を破棄します。 これらの機能に大きな違いはありますか?彼らはc ++のベクトルの下に来る

7
ベクター内の要素のErasing()が機能しない
ベクターを持っています。その中の最後の3つの要素を削除する必要があります。このロジックについて説明しました。プログラムがクラッシュします。何が間違いでしょうか? vector<float>::iterator d = X.end(); for (size_t i = 1; i < 3; i++) { if (i == 1) X.erase(d); else X.erase(d - i); }
10 c++  vector 

2
SWIGでnumpy配列をvector <int>&(参照)に変換する方法
私の目標: Pythonで3つのnumpy配列を作成し(そのうち2つは特定の値で初期化されます)、3つすべてをswigを介してc ++関数にベクトル参照として送信します(これは、データのコピーと効率の低下を避けるためです)。c ++関数に入ったら、2つの配列を追加し、それらの合計を3番目の配列に入れます。 vec_ref.h #include &lt;vector&gt; #include &lt;iostream&gt; void add_vec_ref(std::vector&lt;int&gt;&amp; dst, std::vector&lt;int&gt;&amp; src1, std::vector&lt;int&gt;&amp; src2); vec_ref.cpp #include "vec_ref.h" #include &lt;cstring&gt; // need for size_t #include &lt;cassert&gt; void add_vec_ref(std::vector&lt;int&gt;&amp; dst, std::vector&lt;int&gt;&amp; src1, std::vector&lt;int&gt;&amp; src2) { std::cout &lt;&lt; "inside add_vec_ref" &lt;&lt; std::endl; assert(src1.size() == src2.size()); dst.resize(src1.size()); for (size_t i = 0; …
10 python  c++  numpy  vector  swig 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.