我正在尝试将std::set<B>
转换为std::set<A>
,其中:
class A {
}
class B : public A {
}
最快/最有效的方法是什么?
答案 0 :(得分:2)
此*没有固定时间方法。您可以使用std::copy
或the constructor of std::set
taking two iterators (aka "range constructor")获得最佳效果。
std::set<B> bs = ...;
std::set<A> as(bs.begin(), bs.end());
*在sizeof(B) == sizeof(A)
的情况下,有一种快速但不安全的方式可以在恒定时间内转换它(即class B
不会引入新成员)使用虚拟表(具有虚函数):您可以使用不安全的强制转换。但只有这样做才能知道你正在做什么非常好(它仍然是未定义的行为,但你的编译器可能会按预期进行)。对于使用指针以及指针不需要偏移时的情况也是如此(在使用多重继承或某些其他情况时可能就是这种情况,具体取决于您的编译器)。