c++ - 如何将函数作为参数传递给transform()函数?

标签 c++ string algorithm iterator

我正在尝试创建一个使用transform()确定 vector 中字符串大小的程序,然后将结果放入单独的 vector 中。
我不完全了解如何将函数传递给transform(),但出现错误,将不胜感激!
我的代码:

#include <vector>
#include <string>
#include <iostream>
#include <iterator>
#include <algorithm>

using namespace std;

 // returns the size of a string
int stringLength(string str)
{
    return str.size();
}

int main()
{
          
    auto words = vector<string>{"This", "is", "a", "short", "sentence"};
    
    // vector to store number of characters in each string from 'words'
    auto result = vector<int>{};

    transform( words.begin(), words.end(), result.begin(), stringLength );

    for(auto answer : result)
    cout << answer << " ";

    return 0;
}

预期产量
4 2 1 5 8
实际产量
进程返回-1073741819(0xC0000005)

最佳答案

将函数传递给transform并没有错。问题是您的result vector 为空,因此从result.begin()进行迭代时会调用未定义的行为。您需要做:

std::transform(words.begin(), words.end(), 
               std::back_inserter(result), stringLength);
这是demo
在这种情况下,您也可以从result.begin()进行迭代,因为您确切知道将需要多少个元素。您需要做的就是在开始时分配足够的空间:
auto result = vector<int>(words.size());
这是demo

关于c++ - 如何将函数作为参数传递给transform()函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63649684/

相关文章:

c++ - 如何从静态函数调用本地函数?

java - 在线作业的高级字符串操作

python - 从数组生成排列列表

algorithm - 如何模拟纳什均衡

c++ - 使用 cin 获取多个带空格的输入

java - 为什么C++和Java都没有原生字符串,只有一个类?

c++ - 相当于 Go 中的 sizeof(aType)

delphi - 字符串到 TStream

ios - 如何使用 Swift 4 将字符串拆分为英语和非英语?

algorithm - Dijkstra 的自稳定算法如何工作?