这是在类中使用动态数组C++最好方法
which is the best way to use dynamic array in C++ class?
C++更新,请不要取消投票...
我有班级组和人,组有很多人。有很多方法可以实现这一点。以下 3 种方式很常见。
// 1. using dynamic pointer.
class Group {
Person *persons;
int size;
public:
Group(Person *ps, int sz);
};
// 2. using STL container.
class Group {
vector<Person> persons;
int size;
public:
Group(vector<Person> ps, int sz);
};
// 3. also STL container, but using pointer.
class Group {
vector<Person> *persons;
int size;
public:
Group(vector<Person> *ps, int sz);
};
我想知道哪一种是最好的方法?后两种方式有什么区别吗?如果使用指针,则可能会出现内存泄漏。如果使用参考,我们不需要考虑泄漏问题,不是吗?
除非您一直按值复制组并且性能至关重要,否则第二种方法可能是最好的。您将获得动态大小矢量,并且您不关心释放内存(矢量按值存储)。同样在第二和第三变体中,您不需要存储大小,因为 vector 已经有这些数据。
假设Group
拥有Person
的所有权,并且您希望避免复制向量,则可以移动资源。
class Group {
std::vector<Person> persons;
public:
Group(std::vector<Person>&& ps) : persons(std::move(ps)) {}
};
直接从Group
添加Person
而不公开内部内容可能会更干净:
class Group {
std::vector<Person> persons;
public:
#if 1
// generic method,
template <typename ... Args>
Person& AddPerson(Args&&... args) {
persons.emplace_back(std::forward<Args>(args)...);
return persons.back();
}
#else
// but it would be simpler to just use directly
// the arguments of Person's constructor
Person& AddPerson(const std::string& name) {
persons.emplace_back(name);
return persons.back();
}
#endif
};
使用动态数组编程,首选选项是 std::vector(选项 2)。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '