我遇到以下代码的段错误:
我有一个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.有任何想法吗?
该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)