1

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

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

现在计划是std::transform与 a 结合使用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事先动态找到合适的尺寸?有没有更优雅的方式来实现实际目标?

4

1 回答 1

4

在研究这个问题时,我找到了一个简单的解决方案。只需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);
              }
);
于 2018-07-23T11:27:13.163 回答