2017-12-06 20 views
-1

以下のコードでは、regex_token_iteratorの値をstd :: vectorにコピーできません。 Visual Studio 2015では、パラメータ付きの「std :: copy」が安全でない可能性があると報告しています。std :: regex_token_iteratorをstd :: vectorにコピーする方法は?

誰でもどのように修正することができますか?

#include <vector> 
#include <iostream> 
#include <algorithm> 
#include <iterator> 
#include <regex> 

int main() 
{ 
    // String to split in words 
    std::string line = "dir1\\dir2\\dir3\\dir4"; 

    // Split the string in words 
    std::vector<std::string> to_vector; 
    const std::regex ws_re("\\\\"); 
    std::copy(std::sregex_token_iterator(line.begin(), line.end(), ws_re, -1), 
       std::sregex_token_iterator(), 
       std::back_insert_iterator<std::vector<std::string>>(to_vector)); 

    // Display the words 
    std::cout << "Words: "; 
    std::copy(begin(to_vector), end(to_vector), std::ostream_iterator<std::string>(std::cout, "\n")); 
} 
+1

それが関連するのかどうか、私は確かに知っていないが、しかし、あなたは期待する関数へのベクトルを与えていますイテレータ。 – chris

+0

ありがとう、私はどのようにベクトル上の挿入前方イテレータを渡す検索します。 –

+1

あなたのベクトルは空です。あなたはback_inserterを使用する必要があります。 –

答えて

0
ここ

ベクトルにregex_token_iteratorによって抽出された値を格納するために私の解決策:

#include <vector> 
#include <iostream> 
#include <algorithm> 
#include <iterator> 
#include <regex> 

int main() 
{ 
    std::string s("dir1\\dir2\\dir3\\dir4"); 

    // Split the line in words 
    const std::regex reg_exp("\\\\"); 
    const std::regex_token_iterator<std::string::iterator> end_tokens; 
    std::regex_token_iterator<std::string::iterator> it(s.begin(), s.end(), reg_exp, -1); 
    std::vector<std::string> to_vector; 
    while (it != end_tokens) 
    { 
     to_vector.emplace_back(*it++); 
    } 

    // Display the content of the vector 
    std::copy(begin(to_vector), 
       end(to_vector), 
       std::ostream_iterator<std::string>(std::cout, "\n")); 

    return 0; 
} 
関連する問題