C++ 在指向抽象类的指针向量上使用转换
我在以下代码上遇到SEGFULT: 我有一个带有方法的抽象类C++ 在指向抽象类的指针向量上使用转换,c++,transform,C++,Transform,我在以下代码上遇到SEGFULT: 我有一个带有方法的抽象类A virtual bool Ok() const; 现在,我有下面的向量 std::vector<A*> v; 不幸的是,我总是在第二条线路上遇到故障,我不明白为什么。用标准的C++循环替换转换调用修复了StEngEngt。有什么想法吗?这可能很愚蠢,但我会直接回答我自己的问题。在点击“发布你的问题”前不久,我发现了这个问题,我想,既然我已经键入了所有内容,我也可以发布答案,这样其他人可能会从中受益: 答案是,resu
A
virtual bool Ok() const;
现在,我有下面的向量
std::vector<A*> v;
不幸的是,我总是在第二条线路上遇到故障,我不明白为什么。用标准的C++循环替换转换调用修复了StEngEngt。有什么想法吗?这可能很愚蠢,但我会直接回答我自己的问题。在点击“发布你的问题”前不久,我发现了这个问题,我想,既然我已经键入了所有内容,我也可以发布答案,这样其他人可能会从中受益:
答案是,
results
向量是空的,因此插入results.begin()
是一件非常愚蠢的事情。相反,使用std::back\u inserter(results)一切正常 这可能很愚蠢,但我会直接回答我自己的问题。在点击“发布你的问题”前不久,我发现了这个问题,我想,既然我已经键入了所有内容,我也可以发布答案,这样其他人可能会从中受益:
答案是,
results
向量是空的,因此插入results.begin()
是一件非常愚蠢的事情。相反,使用std::back\u inserter(results)一切正常 results向量为空,transform
不知道您希望将结果推送到该向量上,而不是覆盖现有序列
用正确的大小初始化结果向量:
std::vector<bool> results(v.size());
results
向量为空,transform
不知道您希望将结果推送到该向量上,而不是覆盖现有序列
用正确的大小初始化结果向量:
std::vector<bool> results(v.size());
谢谢事实证明,我自己的解释是相当混乱和错误的。当然,你完全正确!我发现了如何纠正我自己的解释。当然,一旦我能做到,我会把你的答案标记为正确答案。谢谢。事实证明,我自己的解释是相当混乱和错误的。当然,你完全正确!我发现了如何纠正我自己的解释。当然,一旦我可以这样做,我会将你的答案标记为正确答案。调整结果大小和使用begin()
也可以。请记住,vector
有很多错误。调整结果大小和使用begin()
也可以。请记住,vector
有很多错误。
std::transform(v.begin(), v.end(), std::back_inserter(results), std::mem_fun(&A::Ok));