我正在尝试在C++/CLI中创建一个C++对象的列表/集合,但是我已经尝试了各种方法,但似乎没有任何方法可行(编译时出现错误)。
我已经尝试过:
List<MyCppObject*> ^myList; //Does not allow non-.NET objects
ArrayList ^myList;
...
myList->Remove(myCppObject); //cannot convert parameter 1 from 'MyCppObject *' to 'System::Object ^'
我的要求:
1)列表必须包含C++对象。
2)我需要能够删除特定的对象(例如,vector无法满足需求,因为它只能从顶部进行push/pop操作)。
问题:如何在C++/CLI函数中创建一个包含C++对象的列表/集合,并且可以轻松地删除特定的对象?
如果需要其他信息,请告诉我;先感谢您的帮助!
std::vector<T>::erase()
没有问题,但如果你经常这样做,它在性能方面并不是最优的。相反,std::list<T>
具有快速的任意位置插入/删除操作,并且不会使迭代器失效。 - Kerrek SBstd::vector<MyCppObject*> myList;
并得到了以下错误:error C4368: cannot define 'myList' as a member of managed 'MyNamespace::MyManagedClass': mixed types are not supported.
<sad face> - developerstd::list<T>::erase()
是O(1)(通过迭代器),而list<T>::remove()
是线性的(通过值)。比插入/删除复杂度更重要的是迭代器和引用的失效保证。但无论如何,本地和托管之间的混合似乎是一个更重要的问题! :) - Kerrek SB