50 lines
1.4 KiB
C
50 lines
1.4 KiB
C
|
|
/**
|
||
|
|
* @file mix_cc/algorithm/split.h
|
||
|
|
* @brief 把容器按照[n1,n2,n3..nN]进行分段
|
||
|
|
* @author Cat (null.null.null@qq.com)
|
||
|
|
* @version 0.1
|
||
|
|
* @date 2021-09-14
|
||
|
|
*
|
||
|
|
* Copyright: Baosight Co. Ltd.
|
||
|
|
* DO NOT COPY/USE WITHOUT PERMISSION
|
||
|
|
*
|
||
|
|
*/
|
||
|
|
|
||
|
|
#pragma once
|
||
|
|
#include <initializer_list>
|
||
|
|
#include <stddef.h>
|
||
|
|
#include <vector>
|
||
|
|
namespace mix_cc {
|
||
|
|
/**
|
||
|
|
* @brief 把容器按照[n1,n2,n3..nN]进行分段
|
||
|
|
* @tparam Container
|
||
|
|
* @param container 容器
|
||
|
|
* @param split_index 分段的位置索引
|
||
|
|
* @return auto
|
||
|
|
*/
|
||
|
|
template <typename Container>
|
||
|
|
auto split(Container container, std::initializer_list<size_t> split_index) {
|
||
|
|
std::vector<Container> split_result;
|
||
|
|
if (split_index.size() == 0) {
|
||
|
|
split_result.emplace_back(container);
|
||
|
|
return split_result;
|
||
|
|
}
|
||
|
|
if ((*split_index.begin()) != 0) {
|
||
|
|
Container tmp(container.begin(),
|
||
|
|
container.begin() + *(split_index.begin()));
|
||
|
|
split_result.emplace_back(tmp);
|
||
|
|
}
|
||
|
|
for (size_t i = 0; i < split_index.size() - 1; i++) {
|
||
|
|
Container tmp(container.begin() + *(split_index.begin() + i),
|
||
|
|
container.begin() + *(split_index.begin() + i + 1));
|
||
|
|
split_result.emplace_back(tmp);
|
||
|
|
}
|
||
|
|
if (*(split_index.end() - 1) != container.size()) {
|
||
|
|
Container tmp(container.begin() + *(split_index.end() - 1),
|
||
|
|
container.end());
|
||
|
|
split_result.emplace_back(tmp);
|
||
|
|
}
|
||
|
|
return split_result;
|
||
|
|
}
|
||
|
|
} // namespace mix_cc
|