मैं काफी सामान्य कुछ प्रस्ताव (यह अलग कंटेनर और विभिन्न प्रकार के साथ काम करता है, जटिलता उस मामले में बदल जाएगा):
:
#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;
}
आप विभाजित करना चाहते हैं लाइनों की संख्या निर्दिष्ट कर सकते हैं
उदाहरण के लिए: {"First", "Second"}
और {"Third"}
:
int main(int argc, char *argv[]) {
std::vector<std::string> input_vector = {"First", "Second", "Third"};
auto vs = split_vector(input_vector, 2);
return 0;
}
यह दो वैक्टर का उत्पादन करेगा।
स्रोत
2016-11-17 14:16:10
आप इस्तेमाल कर सकते हैं [ 'एसटीडी की प्रति-निर्माता :: vector'] (http://en.cppreference.com/w/cpp/container/vector/vector) जो दो इटरेटर लेता है –