gpt4 book ai didi

c++ - 类成员数组/std::arrays 可以被替换吗?

转载 作者:行者123 更新时间:2023-11-30 05:06:05 32 4
gpt4 key购买 nike

C++ 新手,希望复制 C# 中可用的一些功能,涉及用新构造的数组替换对象数组成员。

class Car {
int id;
Car() {}
};
class Garage {
Car cars[1];
Garage() {}
void addCars(Car crs[]) {
//...do update here
}
};

在 C# 中我可以这样做:

addCars(Car[] crs){
Car[] temp = new Car[cars.Length + crs.Length];
for(int i = 0; i < cars.length; i++){
temp[i] = cars[i];
}
for(int i = 0; i < crs.Length; i++){
temp[i + cars.Length] = crs[i];
}
cars = temp;
}

或者Array.ResizeArray.Copy

我可以声明一个数组并替换现有的对象实例成员数组吗?

如果这不可能:C++ 中的数组有多实用?我可以看到类似 Excel 的东西在使用它们(如果它们不可修改),但它似乎真的很有限。我明白为什么内存分配可能会限制这一点,但显然我来自 C 围栏的更容易的一面。

谢谢。

最佳答案

例如,这里有一些与您的示例等效的 C++。它可能与 C# 等价物有一些模糊的相似之处。

#include <initializer_list>
#include <iostream>
#include <ostream>
#include <vector>

using std::vector;
using std::cout;
using std::endl;
using std::ostream;
using std::initializer_list;

struct Car {
int id;
Car(int newId) : id{newId} {}
};

ostream& operator<<(ostream& o, Car const& car) {
o << car.id;
return o;
}

struct Garage {
vector<Car> cars;
Garage() {}

void addCars(initializer_list<Car> l) {
cars.insert(cars.end(), l.begin(), l.end());
}
};

ostream& operator<<(ostream& o, Garage const& garage) {
char const* sep = "";
for (auto const& car : garage.cars) {
o << sep << car;
sep = ", ";
}
return o;
}

int main() {
Garage garage;
garage.addCars({7, 8, 99, 1000});
cout << garage << endl;
return 0;
}

关于c++ - 类成员数组/std::arrays 可以被替换吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48105337/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com