C++列出了用法

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

jre*_*ady 5

在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的编译器,这可能更容易,或者是唯一的选择.

  • 您无法创建引用向量.你的答案对指针仍然有效,否则你必须使用std :: reference_wrapper. (3认同)