繁体   English   中英

std :: transform with std :: istream_iterator

[英]std::transform with std::istream_iterator

假设我有一个字符串,其中包含用空格隔开的数字。 我想将数字插入整数向量中,其中每个数字都减少一个。 因此,例如:

"1 2 3 4" -> {0, 1, 2, 3}

现在的计划是将std::transformstd::istream_iterator<int>结合使用,如下所示:

std::istringstream source{"1 2 3 4"};
std::vector<int> target;

std::transform(std::istream_iterator<int>(source),
               std::istream_iterator<int>(),
               std::begin(target),
               [](int a) {
                 return a-1;
               }
);

不幸的是,这不起作用,因为std::transform期望target已经具有合适的大小。 所以我要做

std::vector<int> target(4);

现在我有两个问题。 如何动态地预先找到适合target尺寸? 有没有达到目标的更优雅的方法?

在研究此问题时,我找到了一个简单的解决方案。 只需使用std::back_inserter作为输出迭代器,而不是std::begin(target)

std::transform(std::istream_iterator<int>(source),
               std::istream_iterator<int>(),
               std::back_inserter(target),
               [](int a) {
                 return a-1;
               }
);

另一种解决方案使用std::for_each

std::for_each(std::istream_iterator<int>(source),
              std::istream_iterator<int>(),
              [&target](int a) {
                target.push_back(a-1);
              }
);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM