/** * @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 #include #include namespace mix_cc { /** * @brief 把容器按照[n1,n2,n3..nN]进行分段 * @tparam Container * @param container 容器 * @param split_index 分段的位置索引 * @return auto */ template auto split(Container container, std::initializer_list split_index) { std::vector 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