luk*_*985 3 c++ java arraylist
在Java中有一个名为ArrayList的集合.它允许程序员添加类型为T的对象,并通过发出一个简单的方法来删除它们
list.remove(object);
list.add(object);
Run Code Online (Sandbox Code Playgroud)
对于C++,我发现标准向量只使用值对象,所以我没有看到实现相同功能的方法.这种情况是我想在其他地方持有对象的引用,为什么能够使用某种合成模式删除或添加它.我要求的是如何在C++中实现这样的东西:
class Composite {
ArrayList<Composite> children = new ArrayList<>();
public void addChild(Composite child) {
children.add(child);
}
public void removeChild(Composite child) {
children.remove(child)
}
}
class Test{
public static void main() {
Composite a = new Composite();
Composite b = new Composite();
a.addChild(b);
a.removeChild(b);
// from here on a.children is empty.
}
}
Run Code Online (Sandbox Code Playgroud)
我甚至不知道如何用C++来咬这个东西.谢谢.
更新:感谢ResidenBiscuit的答案和其他评论,我能够找到这个的基本代码,可以在这个pastebin网址上找到:http://pastebin.com/h17hh3r4
在Java中,除POD之外的所有内容都是引用.没有指定你想要一个参考,因为这就是你得到的.
在C++中没有那么多.一切都默认为价值.如果你想要一个std::list引用类型,那么你需要一个支持C++ 11 std :: reference_wrapper的编译器.然后你可以这样做:
std::list<std::reference_wrapper<Type>> t_list
要添加到此列表,您需要使用std :: ref:
t_list.push_back(std::ref(myObj))
现在,您添加到此列表中的所有内容都只是std :: reference_wrapper类型.你也可以通过以下方式存储指针:
std::list<Type*> tptr_list
如果您没有符合C++ 11的编译器,这可能更容易,或者是唯一的选择.