C++ リストの分割
C++の仕事を始めました。
リストを分割するコードを記載します。
#include <list>
template<typename T>
std::list<std::list<T>> splitList(std::list<T> datas, int oneListSize) {
const size_t dataNum = datas.size();
const size_t listNum = (dataNum / oneListSize) + 1;
std::list<std::list<T>> splitedList;
size_t processedNum = 0;
for (size_t i = 0; i < listNum; i++) {
std::list<T> newList;
processedNum += oneListSize;
if (processedNum >= dataNum) {
splitedList.push_back(datas);
break;
}
auto itSplitEnd = datas.begin();
std::advance(itSplitEnd, oneListSize);
newList.splice(newList.begin(), datas, datas.begin(), itSplitEnd);
splitedList.push_back(newList);
}
return splitedList;
}
listのメンバ関数splice()でリストの分割と結合ができます。
以上です。