Segfault使用变换指针向抽象类的向量

lyt*_*nyn 1 c++ transform

我遇到以下代码的段错误:

我有一个A带方法的抽象类

virtual bool Ok() const;
Run Code Online (Sandbox Code Playgroud)

现在,我有以下向量

std::vector<A*> v;
Run Code Online (Sandbox Code Playgroud)

填充了几个指向现有子对象的指针.我想积累Ok()方法的结果如下:

std::vector<bool> results;
std::transform(v.begin(), v.end(), results.begin(), std::mem_fun(&A::Ok));
std::accumulate(results.begin(), results.end(), true, std::logical_and<bool>());
Run Code Online (Sandbox Code Playgroud)

不幸的是,我总是在第二行遇到段错误,我不明白为什么.通过标准C++循环替换转换调用可修复segfault.有任何想法吗?

Mik*_*our 5

results向量是空的,transform不知道你要推到它的结果而不是覆盖现有序列.

使用results正确的大小初始化向量:

std::vector<bool> results(v.size());
Run Code Online (Sandbox Code Playgroud)

或使用"后插入"迭代器将结果推送到空向量:

std::transform(v.begin(), v.end(), std::back_inserter(results), std::mem_fun(&A::Ok));
Run Code Online (Sandbox Code Playgroud)