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

標準ライブラリの一部として定義されているシーケンスタイプ。


18
ベクターの内容を印刷する方法は?
C ++でベクトルの内容を出力したいのですが、以下のものがあります。 #include <iostream> #include <fstream> #include <string> #include <cmath> #include <vector> #include <sstream> #include <cstdio> using namespace std; int main() { ifstream file("maze.txt"); if (file) { vector<char> vec(istreambuf_iterator<char>(file), (istreambuf_iterator<char>())); vector<char> path; int x = 17; char entrance = vec.at(16); char firstsquare = vec.at(x); if (entrance == 'S') { path.push_back(entrance); …
281 c++  vector  output  stdvector  cout 



9
C ++ valarray対vector
私はベクターが大好きです。彼らは気の利いた、速いです。しかし、私はvalarrayと呼ばれるものが存在することを知っています。なぜベクトルではなくvalarrayを使用するのですか?valarrayには構文上の砂糖があることは知っていますが、それ以外の場合、いつ役立つのですか?

6
C ++、ベクターにコピーセット
にコピーstd::setする必要がありますstd::vector: std::set <double> input; input.insert(5); input.insert(6); std::vector <double> output; std::copy(input.begin(), input.end(), output.begin()); //Error: Vector iterator not dereferencable 問題はどこだ?
146 c++  copy  stdvector  stdset 

7
ペアの2番目の要素に基づいてペアのベクトルをソートするにはどうすればよいですか?
ペアのベクトルがある場合: std::vector<std::pair<int, int> > vec; ペアの2番目の要素に基づいてリストを昇順でソートする簡単な方法はありますか? 私は仕事を行います小さな関数オブジェクトを書くことができます知っているが、既存の部品を使用する方法があるSTLをし、std::less直接作業を行うには? 編集:私は、ソートするために3番目の引数に渡す別の関数またはクラスを作成できることを理解しています。問題は、標準的なものから構築できるかどうかです。私は本当に次のようになります: std::sort(vec.begin(), vec.end(), std::something_magic<int, int, std::less>());
133 c++  stl  stdvector 

8
C ++でstd :: vectorを返す効率的な方法
関数でstd :: vectorを返すときにコピーされるデータの量、およびstd :: vectorを(ヒープ上の)フリーストアに配置して、代わりにポインターを返す最適化の大きさは次のとおりです。 std::vector *f() { std::vector *result = new std::vector(); /* Insert elements into result */ return result; } よりも効率的: std::vector f() { std::vector result; /* Insert elements into result */ return result; } ?

6
std :: vectorをシャッフルする方法は?
std::vectorC ++でをシャッフルするための汎用的で再利用可能な方法を探しています。これは私が現在行っている方法ですが、中間配列が必要であり、アイテムタイプ(この例ではDeckCard)を知る必要があるため、あまり効率的ではないと思います。 srand(time(NULL)); cards_.clear(); while (temp.size() > 0) { int idx = rand() % temp.size(); DeckCard* card = temp[idx]; cards_.push_back(card); temp.erase(temp.begin() + idx); }
97 c++  shuffle  stdvector 

8
vector :: atとvector :: operator []
私はそれat()が[]その境界チェックのために遅いことを知っています、それは同様にC ++ Vector at / []オペレーター速度 または:: std :: vector :: at()対operator []のような同様の質問で議論されます<<驚くべき結果!! 5〜10倍遅い/速い!。私at()はその方法が何に適しているのか理解できません。 このような単純なベクトルがある場合:インデックスがあり、ベクトルが境界にあるかどうかわからない状況ではなく、std::vector<int> v(10);を使用してその要素にアクセスすることにした場合、try-catchで強制的にラップするブロック:at()[]i try { v.at(i) = 2; } catch (std::out_of_range& oor) { ... } 私はsize()自分でインデックスを使用して確認することで同じ動作を得ることができますが、これは私にとってより簡単で非常に便利です: if (i < v.size()) v[i] = 2; だから私の質問は:vector :: operator []よりvector :: at を使用する利点は何ですか? いつvector :: size + vector :: operator …
95 c++  stl  stdvector 

4
JavaはC ++のstd :: vectorよりも配列の方が8倍高速です。何を間違えたのですか?
サイズが変更されないいくつかの大きな配列を持つ次のJavaコードがあります。私のコンピューターでは1100ミリ秒で実行されます。 同じコードをC ++に実装して使用しましたstd::vector。 まったく同じコードを実行するC ++実装の時間は、私のコンピューターでは8800ミリ秒です。これがゆっくり実行されるように、私は何を間違えましたか? 基本的に、コードは次のことを行います。 for (int i = 0; i < numberOfCells; ++i) { h[i] = h[i] + 1; floodedCells[i] = !floodedCells[i]; floodedCellsTimeInterval[i] = !floodedCellsTimeInterval[i]; qInflow[i] = qInflow[i] + 1; } サイズが約20000のさまざまな配列を反復処理します。 次のリンクの下に両方の実装があります。 Java:https : //ideone.com/R8KqjT C ++:https : //ideone.com/Lu7RpE (ideoneでは、時間制限のため、ループを2000回ではなく400回しか実行できませんでした。ただし、ここでも3回の違いがあります)

2
std :: dynarray vs std :: vector
C ++ 14プレゼントstd::dynarray: std :: dynarrayは、構築時に固定され、オブジェクトの存続期間を通じて変更されないサイズの配列をカプセル化するシーケンスコンテナです。 std::dynarrayと同じように実行時に割り当てる必要がありますstd::vector。 では、より動的な(そしてサイズ変更std::dynarray可能な)使用できる一方で、どのような利点と使用法がありstd::vectorますか?
84 c++  stdvector 

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 

3
std :: vector(ab)は自動ストレージを使用します
次のスニペットを考えてみましょう: #include <array> int main() { using huge_type = std::array<char, 20*1024*1024>; huge_type t; } 通常、デフォルトのスタックサイズは通常20MB未満であるため、ほとんどのプラットフォームでクラッシュします。 次のコードを考えてみましょう: #include <array> #include <vector> int main() { using huge_type = std::array<char, 20*1024*1024>; std::vector<huge_type> v(1); } 意外にもクラッシュします!トレースバック(最近のlibstdc ++バージョンの1つを使用)はinclude/bits/stl_uninitialized.hファイルにつながり、ここに次の行が表示されます。 typedef typename iterator_traits<_ForwardIterator>::value_type _ValueType; std::fill(__first, __last, _ValueType()); サイズ変更vectorコンストラクターは、要素をデフォルトで初期化する必要があります。これが実装方法です。明らかに、_ValueType()一時的にスタックがクラッシュします。 問題は、それが適合実装であるかどうかです。はいの場合、それは実際には巨大な型のベクトルの使用がかなり制限されていることを意味しますね?

3
コンパイル時に多次元std :: vectorの深さを取得するにはどうすればよいですか?
多次元を取りstd::vector、深さ(または次元数)をテンプレートパラメーターとして渡す必要がある関数があります。この値をハードコーディングする代わりに、を使用して深さを値として返すconstexpr関数を作成します。std::vectorunsigned integer 例えば: std::vector<std::vector<std::vector<int>>> v = { { { 0, 1}, { 2, 3 } }, { { 4, 5}, { 6, 7 } }, }; // Returns 3 size_t depth = GetDepth(v); この深さはテンプレート関数としてテンプレート関数に渡されるため、コンパイル時にこれを行う必要があります。 // Same as calling foo<3>(v); foo<GetDepth(v)>(v); これを行う方法はありますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.