文字列とか配列とかを指定した個数に分割するもの。
あとで使う予定。まずは道具を研ぐのが主義。
最後の要素は端数になります。
まずはC++で。
イテレータのヴェクタを返します。分割したあとのm番目の要素の開始位置と終了位置がヴェクタの要素のm番目とm+1番目に格納されます。
コード全体はこちら。
ヘッダファイル。というか関数テンプレートの実装。
#ifndef DVIDEINTO_H #define DVIDEINTO_H #include <vector> #include <iterator> template<typename Iterator> std::vector<Iterator> divideInto(int n, Iterator begin, Iterator end) { std::vector<Iterator> result; const int length = std::distance(begin, end); const int partial_length = (length + n - 1) / n; for(Iterator i = begin; i < end; std::advance(i, partial_length)) { result.push_back(i); } result.push_back(end); return result; } #endif//DVIDEINTO_H
試してみる。
#include <iostream> #include <string> #include <vector> #include "divideInto.h" int main(int, char* []) { std::string s = "12345678"; std::vector<std::string::iterator> result = divideInto(3, s.begin(), s.end()); for(int i = 0; i < result.size() - 1; ++i) { std::cout << std::string(result[i], result[i + 1]) << std::endl; } return 0; }
結果はこんな感じ。
$ ./divideIntoTest 123 456 78