eis/mix_cc/algorithm/split.h

50 lines
1.4 KiB
C
Raw Permalink Normal View History

/**
* @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