ベクトルを「ほぼ等しい」部分に分割し、それらの部分のサブベクトルを作成しようとしています。1つ少ない要素でベクトルを作成するベクトルコンストラクタ
私はここで、元の質問をしています:How to split a vector into n "almost equal" partsが、私は本当に良い解決策を見つけ、私は、使用ここからしようとしています何:Best way to extract a subvector from a vector?
私は開始と終了の値の整数を作成するために、この機能を書いた(ラウンド指定された桁数に丸め私の関数である)
void split(double number, double parts)
{
double loop = number/parts;
for(int i = 0; i < parts; i++)
{
int start = round(i * loop, 0);
int end = round((i + 1) * loop - 1, 0);
cout << start << " " << end << endl;
}
}
は、この機能は、これまでOKに動作しますが、私の問題は、私はこれを実行しようとすることです:。
vector<some> dest(&source[start], &source[end]);
次に、1つのLESS要素を作成し、次にそれを要求します。私はそれは99の要素を持つことになります
vector<some> dest(&source[0], &source[99]);
でそれを呼び出す場合、私は代わりに100 ですが、なぜでしょう、例えば意味ですか?
どうすれば修正できますか?私は[end + 1]を使用すると、最後のベクトルで "subscript out of range"で終了します。
OK、わかりました。私の機能にとって、これは適切な呼び出しですか?ベクトル dest(source.begin()+ start、source.begin()+ end + 1); –
zsero
'end'が最後の要素のインデックスであると仮定すると、それは正しいです。しかし、典型的には、 'end'という名前は実際の最後の要素ではなく1つの終わりを示すためにC++コンテナに関して使用されるので、' last'のように名前を変更したいかもしれません。 – templatetypedef
ありがとう!今は「ラスト」と呼ばれています – zsero