gpt4 book ai didi

c++ - 在指向抽象类的指针 vector 上使用转换的段错误

转载 作者:行者123 更新时间:2023-11-30 00:41:37 27 4
gpt4 key购买 nike

我在以下代码中遇到段错误:

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

virtual bool Ok() const;

现在,我有以下 vector

std::vector<A*> v;

填充了几个指向现有子对象的指针。我想累加 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>());

不幸的是,我总是在第二行出现段错误,我不明白为什么。用标准 C++ 循环替换转换调用修复了段错误。有什么想法吗?

最佳答案

results vector 为空,transform 不知道您希望将结果推送到它而不是覆盖现有序列。

要么用正确的大小初始化results vector :

std::vector<bool> results(v.size());

或使用“向后插入”迭代器将结果插入空 vector :

std::transform(v.begin(), v.end(), std::back_inserter(results), std::mem_fun(&A::Ok));

关于c++ - 在指向抽象类的指针 vector 上使用转换的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3336198/

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