c++ - 有没有标准的算法可以复制到?

标签 c++ algorithm copy range standard-library

我正在使用 istream_iterator<char> it , 所以我不能反向迭代范围(或者迭代两次,没有太多的麻烦。)

我想复制直到满足条件。在标准库中有没有这样的东西:

copy_until(it, istream_iterator<char>(), ostream_iterator<char>(cout), [](const unsigned char i){ return isalpha(i); })

如果我必须滚动一些东西,我只是希望有一些我无法弄清楚的魔法。

编辑:

我所期望的行为 copy_until函数是:

while(it != istream_iterator<char>()) {
    if(!isalpha(static_cast<unsigned char>(*it))) break;
    cout << *it++;
}

最佳答案

只是为了完整性,因为标准没有提供开箱即用的解决方案,这就是我的解决方案:

template<class _InIt, class _OutIt, class _Pr>
inline void copy_until (_InIt _First, _InIt _Last, _OutIt _Dest, _Pr _Pred) {
  while ((_First != _Last) && _Pred(*_First)) {
    *_Dest++ = *_First++;
  }
}

这就是我使用它的方式:

copy_until(std::istreambuf_iterator<char>(is),
           std::istreambuf_iterator<char>(),
           std::ostreambuf_iterator<char>(os), 
           [] (char c) { return <some usefull condition here> });

例如从输入流中读取一个只有 alnum 字符的字符串:

std::istream& operator>> (std::istream& is, std::string& n) {
  std::ostringstream str;
  copy_until(std::istreambuf_iterator<char>(is),
             std::istreambuf_iterator<char>(),
             std::ostreambuf_iterator<char>(str), 
             std::isalnum);
  n = str.str();
  return is;
}

关于c++ - 有没有标准的算法可以复制到?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40869519/

相关文章:

performance - 查找字符串中没有重复的最长子字符串。时间复杂度?

c++:在原始指针映射中复制、删除和运算符=

c++ - 如何通过外部 “C” ABI公开std::vector <std::string>?

c++ - 类的透明聚合

c++ - 在winsock2中使用select时,直接遍历 “readfds(fdsets)”是否合适?

javascript - 在 12000 毫秒内执行 middlePermutation

c - 查找稀疏矩阵中元素周围的最大区域

java - 将一个数组的内容复制到另一个数组并删除旧数组的内容

go - 在go中复制一个文件夹

c++ - 使用 Fiddler 拦截 Boost.Asio HTTP/S 请求