私はboost::tokenizer
CSVのようなファイルを読むために使用しています。トークンを に保存していstd::vector
ます。うまく機能しますが、boost::iterator
トークンごとに のみを保存したいです。
私は試した:
#include <string>
#include <boost/tokenizer.hpp>
#include <boost/range/iterator_range.hpp>
typedef std::string::const_iterator string_iter;
typedef boost::iterator_range<string_iter> string_view;
int main(){
std::string line;
std::vector<string_view> contents;
boost::tokenizer<boost::escaped_list_separator<char>, string_iter, string_view> tok(line.begin(), line.end());
contents.assing(tok.begin(), tok.end());
}
しかし、コンパイルに失敗します:
/usr/include/boost/token_functions.hpp: 'bool boost::escaped_list_separator::operator()(InputIterator&, InputIterator, Token&) のインスタンス化 [with InputIterator = __gnu_cxx::__normal_iterator >; Token = boost::iterator_range<__gnu_cxx::__normal_iterator > >; 文字 = 文字; Traits = std::char_traits]': /usr/include/boost/token_iterator.hpp:70:11: 'void boost::token_iterator::initialize() から必要 [with TokenizerFunc = boost::escaped_list_separator; イテレータ = __gnu_cxx::__normal_iterator >; Type = boost::iterator_range<__gnu_cxx::__normal_iterator > >]' /usr/include/boost/token_iterator.hpp:77:63: 'boost::token_iterator::token_iterator(TokenizerFunc, Iterator, Iterator) から必要 [with TokenizerFunc =ブースト::escaped_list_separator; イテレータ = __gnu_cxx::__normal_iterator >; Type = boost::iterator_range<__gnu_cxx::__normal_iterator > >]' /usr/include/boost/tokenizer.hpp:86:53: 'boost::tokenizer::iter boost::tokenizer::begin() const から必要[with TokenizerFunc = boost::escaped_list_separator; イテレータ = __gnu_cxx::__normal_iterator >; Type = boost::iterator_range<__gnu_cxx::__normal_iterator > >; boost::tokenizer::iter = boost::token_iterator, __gnu_cxx::__normal_iterator >, boost::iterator_range<__gnu_cxx::__normal_iterator > > >]' /home/wichtounet/dev/gooda-to-afdo-converter/src/ gooda_reader.cpp:58:37: ここから必要 /usr/include/boost/token_functions.hpp:187:16: エラー: 'tok += (& next) の 'operator+=' に一致しません->__gnu_cxx::__normal_iterator <_Iterator, _Container>::operator* >()' /usr/include/boost/token_functions.hpp:193:11: エラー: 'tok += (& next)->__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* >()' /usr/include/boost/token_functions.hpp: の 'operator+=' に一致しません: インスタンス化中'void boost::escaped_list_separator::do_escape(iterator&, iterator, Token&) の [with iterator = __gnu_cxx::__normal_iterator >; Token = boost::iterator_range<__gnu_cxx::__normal_iterator > >; 文字 = 文字; Traits = std::char_traits]': /usr/include/boost/token_functions.hpp:176:11: required from 'bool boost::escaped_list_separator::operator()(InputIterator&, InputIterator, Token&) [with InputIterator = __gnu_cxx: :__normal_iterator >; Token = boost::iterator_range<__gnu_cxx::__normal_iterator > >; 文字 = 文字; Traits = std::char_traits]' /usr/include/boost/token_iterator.hpp:70:11: 'void boost::token_iterator::initialize() から必要 [with TokenizerFunc = boost::escaped_list_separator; イテレータ = __gnu_cxx::__normal_iterator >; Type = boost::iterator_range<__gnu_cxx::__normal_iterator > >]' /usr/include/boost/token_iterator.hpp:77:63: 'boost::token_iterator::token_iterator(TokenizerFunc, Iterator, Iterator) から必要 [with TokenizerFunc =ブースト::escaped_list_separator; イテレータ = __gnu_cxx::__normal_iterator >; Type = boost::iterator_range<__gnu_cxx::__normal_iterator > >]' /usr/include/boost/tokenizer.hpp:86:53: 'boost::tokenizer::iter boost::tokenizer::begin() const から必要[with TokenizerFunc = boost::escaped_list_separator; イテレータ = __gnu_cxx::__normal_iterator >; Type = boost::iterator_range<__gnu_cxx::__normal_iterator > >; ブースト::トークナイザー::
また、 を使用して 2 つの反復子を自分で計算しようとしましたboost::token_iterator
が、これまでのところ成功していません。
一部のパフォーマンスを節約するために、文字列ではなく各トークンのイテレータ範囲のみを取得するソリューションはありますか?