大きなベクトルからサブベクトルを作成する必要がある問題に取り組んでいます。ベクトルの要素が連続している場合、それらの要素のベクトルを作成する必要があります。連続していない要素がある場合、その単一要素のベクトルが作成されます。私のロジックは以下の通りです
vector<int> vect;
for (int nCount=0; nCount < 3; nCount++)
vect.push_back(nCount);
vect.push_back(5);
vect.push_back(8);
vector<int>::iterator itEnd;
itEnd = std::adjacent_find (vect.begin(), vect.end(), NotConsecutive());
ファンクタNotConsecutive
は以下の通り
return (int first != int second-1);
std::adjacent_find
したがって、ベクトル 1{0,1,2,3}、ベクトル 2{5}、およびベクトル{8}を作成できるように、イテレータが返されることを期待しています。しかし、もっと簡単な方法があるかどうかはわかりませんか?
std::adjacent_find
編集:ループにいることを忘れてい ました
while(itBegin != vect.end())
{
itEnd = std::adjacent_find (vect.begin(), vect.end(), NotConsecutive());
vector<int> groupe;
if( std::distance(itBegin, itEnd) < 1)
{
groupe.assign(itBegin, itBegin+1);
}
else
{
groupe.assign(itBegin, itEnd);
}
if(boost::next(itEnd) != vect.end())
{
itBegin = ++itEnd;
}
else
{
vector<int> last_element.push_back(itEnd);
}
}
意味はありますか?