タグ付けされた質問 「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 …

1
std :: vectorがアライメントされたメモリを割り当てるための最新のアプローチ
次の質問には答えが古いしかし、関連、およびユーザーからのコメントされたマルク・Glisseは十分に議論されていない可能性があり、この問題に対する17 ++ C以来の新たなアプローチがあることを示唆しています。 すべてのデータにアクセスしながら、SIMDでアライメントされたメモリを適切に動作させようとしています。 Intelでは、タイプのfloatベクトルを作成し__m256、サイズを8分の1に削減すると、メモリが整列されます。 例えば std::vector<__m256> mvec_a((N*M)/8); 少しハックな方法で、ベクトル要素へのポインタを浮動小数点にキャストできます。これにより、個々の浮動小数点値にアクセスできます。 代わりに、私std::vector<float>はを正しく調整して、__m256segfaultingなしで他のSIMDタイプにロードできるようにしたいと思います。 私はaligned_allocを調べてきました。 これにより、正しく整列されたCスタイルの配列が得られます。 auto align_sz = static_cast<std::size_t> (32); float* marr_a = (float*)aligned_alloc(align_sz, N*M*sizeof(float)); ただし、これをどのように行うかわかりませんstd::vector<float>。のstd::vector<float>所有権を与えるmarr_a ことは可能ではないようです。 カスタムアロケーターを作成する必要があるという提案をいくつか見ましたが、これは多くの作業のように思われ、おそらく最新のC ++にはもっと良い方法がありますか?

1
アトミックタイプのベクトルを割り当てる方法は?
どうすれば、原子の型を持つベクトルのメンバーを割り当てることができますか? #include <iostream> #include <thread> #include <vector> using namespace std; int main() { vector<atomic<bool>> myvector; int N=8; myvector.assign(N,false); cout<<"done!"<<endl; } https://wandbox.org/permlink/lchfOvqyL3YKNivk prog.cc: In function 'int main()': prog.cc:11:28: error: no matching function for call to 'std::vector<std::atomic<bool> >::assign(int&, bool)' 11 | myvector.assign(N,false); | ^
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.