Java C++;列出用法
在Java中有一个名为ArrayList的集合。它允许程序员添加一个T类型的对象,并通过发出一个简单的方法将其删除,如Java C++;列出用法,java,c++,arraylist,Java,C++,Arraylist,在Java中有一个名为ArrayList的集合。它允许程序员添加一个T类型的对象,并通过发出一个简单的方法将其删除,如 list.remove(object); list.add(object); 对于C++,我发现标准向量只使用值对象,所以我不知道如何实现相同的功能。 情况是,我想在其他地方保留对对象的引用,为什么我可以使用某种组合模式删除或添加它。我想问的是如何在C++中实现这样的功能: class Composite { ArrayList<Composite> chi
list.remove(object);
list.add(object);
对于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.
}
}
类组合{
ArrayList子项=新的ArrayList();
公共void addChild(复合子级){
添加(child);
}
public void removeChild(复合子级){
儿童。移除(儿童)
}
}
课堂测试{
公共静态void main(){
复合材料a=新复合材料();
复合材料b=新复合材料();
a、 儿童(b);
a、 removeChild(b);
//从这里开始,孩子们是空的。
}
}
我甚至不知道如何用C++来咬这个东西。谢谢
更新:多亏了ResidenBiscuit的回答和其他评论,我才能够找到这方面的基本代码,可以在这个pastebin url上找到:在Java中,除了POD之外的所有内容都是参考。没有指定您想要引用,因为这就是您得到的全部 <>不是在C++中那么多。一切都默认为价值。如果需要引用类型的
std::list
,则需要一个支持C++11 std::reference\u包装器的编译器。然后,您可以执行以下操作:
std::list t\u list
要添加到此列表,您需要使用std::ref:
t\u列表。向后推(std::ref(myObj))
现在,添加到此列表中的所有内容都将是std::reference\u包装类型。您也可以通过执行以下操作来存储指针:
std::list tptr\u list
如果没有兼容C++11的编译器,这可能更容易,或者是唯一的选择。查找STL容器,尤其是
std::list
。std::vector
是您想要的,您可以使用std::remove
删除元素。您无法创建引用向量。对于指针,您的答案仍然有效,否则您必须使用std::reference_包装器。std::vector
不支持按照OP的请求随机删除项(没有迭代器)。IMHOstd::list
是正确的java等价物。这是真的。我需要能够移除我放入容器中的内容。然后只需将std::vector
更改为std::list
,您将被设置为:)好的,您也可以对您的答案执行此操作,以便我可以接受:)