vector<bool>
を010101 ...などのシーケンスで開始するように初期化することはできますか?または、私は0でループを初期化し、他のすべての値を1に変更する必要がありますか?ベクトル<bool>を値01で初期化するにはどうすればよいですか?
答えて
このようstd::generate_n
を使用し、@のzmbqの答えに拡大することです:あなたが使用することになり
std::vector<bool> v;
v.reserve(desired_size);
bool b = true;
std::generate_n(std::back_inserter(v), desired_size, [&b]() { return (b = !b); });
std::generate
の場合vector
すでにはサイズでした。
あなたがC++ 11コンパイラを持っていない場合は
...std::vector<bool> v;
v.reserve(desired_size);
struct GenFn
{
GenFn(bool b = true)
: b(b)
{
}
bool operator()() const
{
return (b = !b);
}
private:
bool b;
};
std::generate_n(std::back_inserter(v), desired_size, GenFn());
generateをご覧ください。
あなたはこの
#include<vector>
#include<iostream>
using namespace std;
int main()
{
bool bool_array[] = {true,false,true,false,true,false,true,false};
vector<bool> bVec;
bVec.insert(bVec.begin(),bool_array,&bool_array[sizeof(bool_array)/ sizeof(*bool_array)]);
for(int i=0;i<bVec.size();++i){
cout<<"At pos :"<<i<<" Val is:"<<bVec[i]<<endl;
}
return 0;
}
ような何かを試すことができ、出力は
At pos :0 Val is:1
At pos :1 Val is:0
At pos :2 Val is:1
At pos :3 Val is:0
At pos :4 Val is:1
At pos :5 Val is:0
At pos :6 Val is:1
At pos :7 Val is:0
挿入を使用する代わりにその処理を行うコンストラクタを使用する方が高速でしょうか?それは大きなベクトルです。 – Marty
zmbqに触発され、私はこれを書いて、それが動作します:
#include <algorithm>
#include <vector>
bool fill01()
{
static int val=1;
val=++val%2;
return val==0?false:true;
}
int _tmain(int argc, _TCHAR* argv[])
{
std::vector<bool> ve(100);
std::generate(ve.begin(), ve.end(), fill01);
return 0;
}
別の可能性(コードがテストされていません、バグかもしれない)。基本的には、mosのgenerate_n
と同じですが、別のルートです。
struct flipflop_iterator : public std::iterator<std::forward_iterator_tag, bool> {
bool offset; // make sure the first value is false
size_t remaining;
flipflop_iterator(size_t length) : offset(length % 2), remaining(length) {}
flipflop_iterator &operator++() {
--remaining;
return *this;
}
flipflop_iterator operator++(int) {
flipflop_iterator tmp(*this);
++(*this);
return tmp;
}
bool operator*() const {
return (remaining + offset) % 2;
}
bool operator==(const flipflop_iterator &rhs) const {
return remaining == rhs.remaining;
}
bool operator!=(const flipflop_iterator &rhs) const {
return !(*this == rhs);
}
};
std::vector<bool> v(flipflop_iterator(100), flipflop_iterator(0));
はあなたが前方反復子のランダムアクセスイテレータの代わりflipflop_iterator
を行うことで性能向上を得ることができる:あなたがflipflop_iterator
のうち、他のいくつかの使用を得ることができるかどうかはgenerate_n
と比較することにより、これがやって唯一の価値があることを、おそらく明らかですしかし、私はこれらのメンバ関数すべてを書き留めるように気にすることはできません。その場合は、boost::counting_iterator
とboost::transform_iterator
から構築する方がよいでしょう。
- 1. Pythonで2Dリスト/配列の列ベクトルを初期化するにはどうすればよいですか?
- 2. IKImageViewを初期化するにはどうすればよいですか?
- 3. 変数を初期化するにはどうすればよいですか?
- 4. コンテンツプロバイダを初期化するにはどうすればよいですか?
- 5. トリガー:別の値を持つテーブルの値を初期化するにはどうすればよいですか?
- 6. 一様な初期化はどのようにすればよいですか?
- 7. 初期化されていない値を避けるにはどうすればよいですか?
- 8. LinkedListをエントリ/値で初期化するにはどうすればよいですか?
- 9. C#拡張関数内で値(== null)を初期化するにはどうすればよいですか?
- 10. 再帰型エイリアスに基づく値を初期化するにはどうすればよいですか?
- 11. オブジェクトを渡してフォームの入力値を初期化するにはどうすればよいですか?
- 12. このようなマップをC++で初期化するにはどうすればよいでしょうか?
- 13. Connectミドルウェアで非同期初期化を使用するにはどうすればよいですか?
- 14. UINavigationControllerで表示されるカスタムビューを初期化するにはどうすればよいですか?
- 15. Javaでエポック(1970-01-01)のミリ秒を取得するにはどうすればよいですか?
- 16. DATEをDD-MM-YYYYに、01-01-1993以降にフォーマットするにはどうすればよいですか?
- 17. numpyでlinspaceをベクトル化するにはどうすればいいですか
- 18. Goで合成された構造体を初期化するにはどうすればよいですか?
- 19. フラグメント内に含まれるレイアウトのOnClickListenerを初期化するにはどうすればよいですか?
- 20. C++データ型を初期化できるクラスを作成するにはどうすればよいですか?
- 21. valgrindでどの値の値が初期化されていないのかを特定するにはどうすればよいですか?
- 22. Javaでこの2D配列をnullで初期化するにはどうすればよいですか?
- 23. TensorFlowでベルヌーイ分布で変数を初期化するにはどうすればよいですか?
- 24. InputStreamでImageInputStreamをキャストまたは初期化するにはどうすればよいですか?
- 25. ベクトルのベクトルを初期化する<doubles> C++
- 26. 初期化コンポーネントを使用せずにブラウザでナビゲートするにはどうすればよいですか?
- 27. JAVA:Object-wrappedインスタンスで特定のクラスタイプにArrayListを初期化するにはどうすればよいですか?
- 28. 空のベクトルに値を渡すにはどうすればよいですか?
- 29. UIButtonから継承するこのカスタムクラスを初期化するにはどうすればよいですか?
- 30. クラスメンバであるスマートポインタを初期化するにはどうすればよいですか?
"ベクトルがすでにサイズを持っていればstd :: generateを使用しますが、そうでなくても0サイズのベクトルでも最初に' reserve'したいと思うかもしれません。 –
非C++ 11のサンプルがどこかにコピーペーストされる可能性があるので、ジェネレータファンクタを匿名型のインスタンスではなく名前付きの型にするとよいでしょう。それが最後に使用された状態を '覚えていない')、ユーザ定義のコンストラクタを少なくとも1つ持つ必要があります。したがって、bは必ず初期化されます。 –
十分に公正です。私は眠くて怠け者になったので、初期化のステップは間違いなく必要なものでした。 :) – moswald