2016-09-13 1 views
0

私は未定義の長さのベクトルvSignalを持っています。std :: copyによってコピーされた要素がベクトルの外側にあるケースを処理する方法

私は私のdictionnaryベクターにvSignalの一部をコピーする必要があります。

std::copy(vSignalIt1-n1, vSignalIt1, vDictionnary.begin()); 

vSignalIt1vSignalイテレータの一つです。 copy()関数を呼び出すと、vSignalIt1-n1がベクター内の値を指しているかどうかわかりません。

rend()vSignalに達するまで値を1つずつコピーするリバースイテレータを使用してループを作成することを考えました(実際にはそれを実行していました)。

しかし、copy()機能を使用する代替ソリューションはありますか?

EDIT:

少し精度:vDictionnary固定サイズ(N1)として、私はそれを完全に充填するVSIGNALから十分な値をコピーすることができない場合に、Iは0

でそれを完了
+0

を使用することができます - '(N1 <= vSignalIt1 vSignal.begin())を? – NathanOliver

+0

この場合でもvSignalからvDictionnaryに値をコピーする必要があります。 –

+5

'std :: min(n1、std :: distance(vSignal.begin()、vSignalIt1))'? – Jarod42

答えて

1

あなたはなぜ、 `かどうかをチェックしません

const auto n2 = std::min(n1, std::distance(vSignal.begin(), vSignalIt1)); 

std::copy(vSignalIt1 - n2, vSignalIt1, vDictionnary.begin()); 
std::fill(vDictionnary.begin() + n2, vDictionnary.end(), 0); 
関連する問題