{0, 1, 2, 3} 现在计划是使用 std::tra-6ren">
gpt4 book ai didi

c++ - std::transform 与 std::istream_iterator

转载 作者:行者123 更新时间:2023-11-30 01:36:41 24 4
gpt4 key购买 nike

假设我有一个字符串,其中包含由空格分隔的数字。我想将数字插入一个整数 vector 中,其中每个数字都减一。例如:

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

现在计划是使用 std::transform结合 std::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;
}
);

另一个solution使用 std::for_each:

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

关于c++ - std::transform 与 std::istream_iterator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51477696/

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