我提出的東西很一般(它與不同的容器和不同類型的複雜性將在這種情況下發生變動):
#include <algorithm>
#include <iterator>
#include <vector>
template<typename Vector>
auto split_vector(const Vector& v, unsigned number_lines) {
using Iterator = typename Vector::const_iterator;
std::vector<Vector> rtn;
Iterator it = v.cbegin();
const Iterator end = v.cend();
while (it != end) {
Vector v;
std::back_insert_iterator<Vector> inserter(v);
const auto num_to_copy = std::min(static_cast<unsigned>(
std::distance(it, end)), number_lines);
std::copy(it, it + num_to_copy, inserter);
rtn.push_back(std::move(v));
std::advance(it, num_to_copy);
}
return rtn;
}
您可以指定要拆分的行數:
例如:
int main(int argc, char *argv[]) {
std::vector<std::string> input_vector = {"First", "Second", "Third"};
auto vs = split_vector(input_vector, 2);
return 0;
}
這將產生兩個矢量:{"First", "Second"}
和{"Third"}
。
您可以使用[STD的'拷貝構造函數:: VECTOR'(http://en.cppreference.com/w/cpp/container/vector/vector)需要兩個迭代器 –