gpt4 book ai didi

c++ - 递增 back_inserter 是可选的吗?

转载 作者:搜寻专家 更新时间:2023-10-31 00:15:13 24 4
gpt4 key购买 nike

我很困惑是否应该在设置 OutputIterator 时递增它。请参阅以下我试图拆分字符串的代码。我的问题是 while 循环的第三行,无论我有 *oit = ... 还是 *oit++ = ...,代码似乎都能正常工作有人可以向我解释为什么吗?

template<class O> void split(string& s, O oit){

string::iterator jt, it = s.begin();

while(1){
jt = find(it, s.end(), ' ');
if(it == s.end() && jt == s.end()) return;
*oit++ = string(it, jt);
it = jt;
if(it != s.end() ) it++;
}
}

...

int main(){

string s;
getline(cin, s);

vector<string> v;

split(s, back_inserter(v));
copy(v.begin(), v.end(), ostream_iterator<string>(cout, "\n"));

}

最佳答案

std::back_inserter 创建一个迭代器,它通过在基础集合上调用 push_back 来插入。这意味着增量不是它正常工作所必需的。

虽然其他输出迭代器不一定如此,因此为了使您的代码正确,它应该执行增量事件,尽管在这种特殊情况下它基本上被忽略了。

就其值(value)而言,在这种特殊情况下,您可以使用更少/更简单的代码获得相同的基本效果:

string s;
getline(cin, s);

replace(s, ' ', '\n');
cout << s;

关于c++ - 递增 back_inserter 是可选的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20108022/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com