vector.resize 不是在 C++ 中增加向量的大小
vector.resize isn't increasing size of the vector in c++
我是一个c++初学者。我正在练习如何使用 class 和头文件。该程序管理建筑物的租金。它有一个 Rent
class 和一个 Floor
class。下面是这些 class 的一些定义。
rent.cpp(仅复制重要功能)
管理有关 Floor
的信息并且有 vector<Floor> paid_by_floors;
属性。
#include "rent.hh"
void Rent::set_floor_count(int count){
this->paid_per_floors.reserve(count);
this->paid_per_floors.resize(count);
}
void Rent::set_floor(int index, Floor floor){
this->paid_per_floors[index] = floor;
}
Floor Rent::get_floor(int index){
return this->paid_per_floors[index];
}
floor.cpp(仅复制重要功能)
管理有关房间的信息并有 vector<Floor> paid_by_rooms;
属性。
#include "floor.hh"
void Floor::set_room_count(int count){
this->paid_per_rooms.resize(count, 0);
}
int Floor::get_room_amount(int index){
return this->paid_per_rooms[index];
}
void Floor::set_room_amount(int index, int amount){
this->paid_per_rooms.push_back(amount);
// Tried with paid_per_rooms[index] = amount;
}
main.cpp
int main(int argc, char const *argv[])
{
Rent m_rent(5);
cout << m_rent.get_floor_count() << endl; // stdout line:1
m_rent.set_floor_count(2);
cout << m_rent.get_floor_count() << endl; // stdout line:2 (correct)
m_rent.get_floor(0).set_room_count(5);
cout << m_rent.get_floor(0).get_room_count() << endl; // stdout lines:3 (incorrect)
m_rent.get_floor(0).set_room_amount(0, 100);
m_rent.get_floor(0).get_room_amount(0); // stdout line:4 (seg fault)
return 0;
}
并在 stdout
上输出。
5
2
0
Segmentation fault (core dumped)
如您所见,当我更改 paid_per_floors
矢量的大小时。有用。但是,它不适用于 paid_per_rooms
。此外,它 returns 代表 OutOfBound
的分段错误。我该如何解决?
之前做过一些研究
在 google 上搜索了关于此问题的查询,例如 vector resize does not work, 矢量调整大小不会增加大小。答案是使用 push_back
而没有像 vec[0]
这样的数组索引。在 set_room_count
函数中,我也在 resize
之前使用了 reserve
。但是,问题并没有得到解决。
Floor Rent::get_floor(int index) {
return this->paid_per_floors[index];
}
return 是 Floor 对象的一个副本,您将预留应用到该副本,而原始对象仍未更改。
您应该return一个引用,以便您更改原始对象:
Floor& Rent::get_floor(int index) {
return this->paid_per_floors[index];
}
我是一个c++初学者。我正在练习如何使用 class 和头文件。该程序管理建筑物的租金。它有一个 Rent
class 和一个 Floor
class。下面是这些 class 的一些定义。
rent.cpp(仅复制重要功能)
管理有关 Floor
的信息并且有 vector<Floor> paid_by_floors;
属性。
#include "rent.hh"
void Rent::set_floor_count(int count){
this->paid_per_floors.reserve(count);
this->paid_per_floors.resize(count);
}
void Rent::set_floor(int index, Floor floor){
this->paid_per_floors[index] = floor;
}
Floor Rent::get_floor(int index){
return this->paid_per_floors[index];
}
floor.cpp(仅复制重要功能)
管理有关房间的信息并有 vector<Floor> paid_by_rooms;
属性。
#include "floor.hh"
void Floor::set_room_count(int count){
this->paid_per_rooms.resize(count, 0);
}
int Floor::get_room_amount(int index){
return this->paid_per_rooms[index];
}
void Floor::set_room_amount(int index, int amount){
this->paid_per_rooms.push_back(amount);
// Tried with paid_per_rooms[index] = amount;
}
main.cpp
int main(int argc, char const *argv[])
{
Rent m_rent(5);
cout << m_rent.get_floor_count() << endl; // stdout line:1
m_rent.set_floor_count(2);
cout << m_rent.get_floor_count() << endl; // stdout line:2 (correct)
m_rent.get_floor(0).set_room_count(5);
cout << m_rent.get_floor(0).get_room_count() << endl; // stdout lines:3 (incorrect)
m_rent.get_floor(0).set_room_amount(0, 100);
m_rent.get_floor(0).get_room_amount(0); // stdout line:4 (seg fault)
return 0;
}
并在 stdout
上输出。
5
2
0
Segmentation fault (core dumped)
如您所见,当我更改 paid_per_floors
矢量的大小时。有用。但是,它不适用于 paid_per_rooms
。此外,它 returns 代表 OutOfBound
的分段错误。我该如何解决?
之前做过一些研究
在 google 上搜索了关于此问题的查询,例如 vector resize does not work, 矢量调整大小不会增加大小。答案是使用 push_back
而没有像 vec[0]
这样的数组索引。在 set_room_count
函数中,我也在 resize
之前使用了 reserve
。但是,问题并没有得到解决。
Floor Rent::get_floor(int index) {
return this->paid_per_floors[index];
}
return 是 Floor 对象的一个副本,您将预留应用到该副本,而原始对象仍未更改。
您应该return一个引用,以便您更改原始对象:
Floor& Rent::get_floor(int index) {
return this->paid_per_floors[index];
}