作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我很困惑是否应该在设置 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/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!