3
反復処理の中でコードを複製する必要がないように、順方向反復と逆方向反復を切り替えようとしています。C++順方向反復と逆方向反復の切り替え
私は、三項演算子を使用してみましたが、それは
auto begin = reverse ? mPxSize::reverse_iterator :
mPxSize::iterator;
を動作しませんでした(それはさまざまなタイプが好きではなかったことを私の理解だった)、これのベースバージョンがある場合、私は疑問に思ってイテレータは、私は次のように
??? begin;
??? end;
if (reverse) {
mPxSize::reverse_iterator begin = m_levels.rbegin();
mPxSize::reverse_iterator end = m_levels.rbegin();
} else {
mPxSize::const_iterator begin = m_levels.begin();
mPxSize::const_iterator end = m_levels.begin();
}
for (it = begin; it != end; it++) {
は私が???でマークされたいくつかのベースとイテレータを先行宣言することはできますうまくいくように宣言することができます。
template<typename It>
void foo(It begin, It end) {
for (It it = begin; it != end; ++it) {
// ...
}
}
void bar(std::vector<int>& m_levels, bool reverse) {
if (reverse) {
foo(m_levels.rbegin(), m_levels.rend());
} else {
foo(m_levels.begin(), m_levels.end());
}
}
アイデアが移動することです:または、ここでテンプレートを使用作るための簡単な方法
イテレータのタイプに反復コードをテンプレート化します。 –
現在、私の関数が定義されて ダブルfooが(constが逆BOOL){...} は、私は今、何かのよう テンプレート double inner_foo(T_b begin、T_e end){ for(begin = it;!= end; it ++){...} –
chrise
はい、 'foo'の内部を関数テンプレート' bar'に移動します。 'foo'は適切な型の適切なイテレータ、' 'bar ''をそれぞれの場合に、順方向または逆方向に呼び出します。 –