string
을 분리하고 각각의 필드를 vector
안에 넣는 토크 나이저를 작성했습니다. 내 생각은 string::find
반복적으로 사용하는 것이었다. 임시객체를 사용하는 대신에 move_iterator
을 사용했습니다. 원래 문자열은 알고리즘이 처리 할 때 문자가 도난당하는 것을 보았습니다. 그러나 그것은 일어나지 않았다.C++ - std :: string and move_iterator
#include <vector>
#include <string>
#include <iostream>
using namespace std;
void
print_strings
(const vector<string> & v)
{
unsigned int i = 1;
for (const auto & s : v)
cout << "#" << i++ << "\t: \"" << s << "\"" << endl;
return;
}
int
main
(void)
{
string base("hello, this is an example string, I like icescreams");
/* Vector to populate with strings */
vector<string> v;
/* 1: a copy of 'base' */
v.emplace_back(base);
/* 2: a copy of 'base' using iterators */
v.emplace_back(base.begin() , base.end());
/* 3: a string that I think _should_ move from 'base' */
v.emplace_back(make_move_iterator(base.begin()) , make_move_iterator(base.end()));
/* Print the strings twice so that we
* can see if something has changed. */
print_strings(v);
print_strings(v);
return 0;
}
g++ -std=c++11 -Wall -Wextra -Werror -O2
컴파일, 그것은 어떤 경고를 보여줍니다 :
이
내가 무슨 말을하는지 보여주는 예제 코드입니다.내 생각에 string
의 생성자는 범위 인 버전이며 항상 지정된 범위에서 복사됩니다. 확실하지는 않지만 사용하고 싶은 해결 방법을 확인하고 싶습니다.
안부, Kalrish
'char'에서 이동하는 것은 그것으로부터 복사하는 것과 같습니다. 또한'base'를 인쇄하여 변경된 사항이 있는지 확인하지 않습니다. – jrok
@jrok 실제로, 나는 그것을 잊었다. 이제 시도해 보았습니다.'base'가 수정되지 않았다고 말할 수 있습니다. – Kalrish
그 샘플에는 단일의 값이 없습니다. –