如何在指针数组中插入对象
How to insert an object in the array of pointers
我有一个指针数组:
Hotel *hotels[size];
for (int i = 0; i < size; ++i)
hotels[i] = new Hotel();
我想在数组中插入一个对象名字是
cin >> tmp_name;
for (int i = 0; i < size; i++) {
if (hotels[i]->get_name() == tmp_name) {
hotels[size] = new Hotel();
size += 1;
Hotel *tmp_hotel;
tmp_hotel = hotels[i+1];
hotels[i+1]->fillHotel();
for (i = i + 2; i < size; i++) {
hotels[i] = tmp_hotel;
tmp_hotel = hotels[i+1];
}
break;
}
}
我做错了什么?
乌利希期刊指南:我的解决方案:
cin >> tmp_name;
for (int i = 0, j = 0; i < size; i++, j++) {
new_hotels[j] = hotels[i];
if (hotels[i]->get_name() == tmp_name) {
new_hotels[j+1]->fillHotel();
++j;
system("clear");
}
}
hotels[size] = new Hotel();
++size;
for (int i = 0; i < size; i++) {
hotels[i] = new_hotels[i];
}
我可以在你的代码中看到不同的错误。
例如:
Hotel *hotels[size];
size
应该是一个常量表达式,有些东西让我认为情况并非如此。VLA不是 c++ 标准的一部分。简而言之,您不能在堆栈上分配动态内存。正确的初始化应该是:
Hotel* hotels = new Hotel*[size];
循环中的行:
hotels[size] = new Hotel();
你实际上访问超出了你的数组:size
索引是一些内存不包括在你的数组,这将产生一个未定义的行为。
另一个奇怪的行如下:
size += 1;
尽管事实证明size
不是一个常数,你不能简单地改变这个变量来增加向量的大小。您实际上只是更改了一个变量size
,但是为您的数组分配的内存将是相同的。
<标题>如何解决?
为了增加(或改变)数组的大小,解决方案几乎总是创建一个新的数组,复制旧数组。在你的情况下,这个解决方案是非常合理的,因为你应该只复制指针,而不是整个对象。
关于S.O.这个话题有很多问题,比如这里。
尽管如此,我强烈建议您使用最实用的替代方案,即使用真正的c++代码。
最有效的类是std::vector
,这是一个 c++ 处理动态数组的方法。
最后,还应该考虑使用std::unique_ptr<T>
类来处理动态内存和指针。
最终的解决方案将是一个类:
std::vector<std::unique_ptr<Hotel>> hotels;
标题>
相关文章:
- 将包含不可复制对象的对插入到映射中
- 在 std::map 中插入对象时构造函数中变量的地址
- 在 c++ 列表中插入对象
- 在列表C 中插入对象
- 如何创建插入对象使用duktape
- 如何在地图中插入对象以保持其排序
- bad_alloc通过右值和对象有效性插入对象时
- 插入对象以设置c++
- 在地图中插入对象而不复制对象
- C++:使用递归在二叉搜索树中插入对象
- 如何在矢量中高效、正确地插入对象
- vector插入对象的副本或引用
- 我可以插入对象到tr1 unordered_map
- 在ostreams中插入对象
- 如何在指针数组中插入对象
- 在链表中按升序插入对象
- 标记分派结构不能插入对象类型
- 链表-插入对象
- 在vector的下标处插入对象
- 按字母顺序向vector插入对象