将类的实例插入到vector中
Insert instance of class into the vector C++
我创建了一个类Location
,它是类City
和Village
的父类。我有一个vector<Location>
,现在我需要插入City
或Village
到这个vector
。我尝试了如下示例:
vector<Location> locations;
locations.push_back(new City("New York", 9000, 1, 2));
或
vector<Location> locations;
Location* loc = new City("New York", 9000, 1, 2);
locations.push_back(loc);
但是没有效果。你能给我提个建议吗?我不是c++程序员,我通常用Java编程,所以请帮助我
c++ new
动态分配,表达式的类型将是指针。在Java中,这是(几乎)所有对象分配的底层,只是您看不到而已。Java中的"名称"是对通过JVM分配的对象的引用(这个过程非常有趣,我建议阅读有关它的内容)。然而,Java复制了c++的语法,并让它做了一些非常不同的事情,所以从Java切换到c++是令人困惑的。
由于使用的是多态性,因此需要一个指针的std::vector
std::vector<Location*> locations;
locations.push_back(new City{"New York", 9000, 1, 2});
当你完成这个向量时,你需要用new:
来delete
你分配的所有东西。for (auto p : locations) {
delete p;
}
尽管所有这些最好包装在另一个类中,该类在其析构函数中处理删除操作。如果你没有其他指向这些对象的指针,你也可以利用unique_ptr,在这种情况下,你不必手动delete
std::vector<std::unique_ptr<Location>> locations;
locations.push_back(std::unique_ptr<Location>{new City{"New York", 9000, 1, 2}});
带有类型别名的:
using LocPtr = std::unique_ptr<Location>;
std::vector<LocPtr> locations;
locations.push_back(LocPtr{new City("New York", 9000, 1, 2)});
根据你的编译器对c++的支持程度,你也可以这样做
std::vector<std::unique_ptr<Location>> locations;
locations.push_back(std::make_unique<City>("New York", 9000, 1, 2));
另一个需要注意的区别是:由于使用的是指针,因此必须使用
->
操作符而不是.
locations.at(0)->name(); // assuming class Location{} has a name member function
p->attr
等价于(*p).attr
要使你的类多态,它将需要至少有一个虚函数。如果没有别的,你至少应该有virtual ~Location(){}
。请注意,任何未标记为virtual
的函数都不会在运行时对其进行查找。
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 如何有效地在 std::vector 中插入一对?
- 为 std::vector 编写自定义插入函数
- 有没有更快的方法可以在 std::vector 中插入元素
- 在 C++ 中使用 Vector 在动态数组中插入值,循环
- 如何将 n 个连续元素插入到元素类型不可复制的 std::vector 中?
- 在设计方面:重载vector类型的类成员的插入运算符
- 如何在一对集合的向量中插入元素?vector<pair<int,set<string>>>
- C++ 如何在 std::vector 中插入一个连续的间隔范围?
- 将 2D 数组插入 std::vector 时"cannot convert from 'const GLfloat [12]' to '_Objty'"错误消息
- 有没有办法将 vector<unsigned char> 插入 postgresql 表中,具有 bytea 属性,没有 UTF8 编码错误?
- 当使用 std::vector::p ush_back 插入未知数量的元素时,是否应该在每次推送时检查 std::vec
- 如何将对象插入std::vector
- SegFault将插入std :: vector的成员函数插入std :: vector
- 我可以按值(复制)将对象从一个 std::vector 插入到另一个吗?
- vector插入对象的副本或引用
- vector插入新对象
- 如何实现std::vector插入?c++
- stl vector::插入Windows和linux中的差异
- 按字母顺序向vector插入对象