结构内向量的初始化
Initialization of a vector inside a struct
struct geopoint {
double x;
double y;
const char * description;
};
struct georectangle {
double left_x;
double bottom_y;
double right_x;
double top_y;
const char * description;
};
struct geomap {
vector < geopoint * > geopointList;
vector < georectangle * > georectangleList;
};
struct geomap * geomap_new() {
struct geomap * newGeoMap = (struct geomap * ) malloc(sizeof(struct geomap));
return newGeoMap;
}
void geomap_delete(struct geomap * m) {
printf("%lun", m->geopointList.size());
for (int i = 0; i < m->geopointList.size(); i++) {
free(m->geopointList[i]);
}
printf("%lun", m->georectangleList.size());
for (int i = 0; i < m->georectangleList.size(); i++) {
free(m->georectangleList[i]);
}
free(m);
}
int main () {
struct geomap * m = geomap_new();
assert(m);
geomap_delete(m);
}
我是C++新手,我对这种语言的对象初始化感到非常困惑......在 Java 中,初始化非基元类型的对象时,始终使用new
关键字。在C++中,在我看来,有时默认构造函数会自动执行,有时不会。
在上面的代码片段中,通过geomap_new()
函数,我创建了一个包含两个指针向量的struct geomap
实例。
我的问题如下:
如何将这两个向量初始化为新的空向量?在Java中,我会使用new
关键字...C++也有这样的事情吗? 我问这个问题是因为如果我不以任何方式初始化它们,当我在geomap_delete
函数中打印这两个向量的大小时,geopointList
的大小应该是 0,但georectangleList
的大小是一个很大的随机数。在我看来,只有第一个向量被初始化。
另一个问题...
如果开始在向量中添加很多东西,这些向量就会开始成长。它们的大小是否有可能变得比结构本身的大小大?结构会realloc
吗?
您可以将代码简化为
#include <iostream>
#include <string>
#include <vector>
struct geopoint {
double x;
double y;
std::string description;
};
struct georectangle {
double left_x;
double bottom_y;
double right_x;
double top_y;
std::string description;
};
struct geomap {
std::vector<geopoint> geopointList;
std::vector<georectangle> georectangleList;
};
int main () {
geomap m;
std::cout << "m.geopointList.size(): " << m.geopointList.size() << 'n';
std::cout << "m.georectangleList.size(): " << m.georectangleList.size() << 'n';
m.geopointList.push_back({1, 2, "Description"});
m.georectangleList.push_back({1, 2, 3, 4, "Description"});
std::cout << "m.geopointList.size(): " << m.geopointList.size() << 'n';
std::cout << "m.georectangleList.size(): " << m.georectangleList.size() << 'n';
}
以避免此类问题。避免动态内存分配和释放。不要使用malloc
、free
、new
和delete
。
"如何将这两个向量初始化为新的空向量?">默认构造函数会为您执行此操作。
"它们的大小是否有可能变得比结构本身的大小更大?结构是否要转到"realloc">该结构具有固定大小并包含两个向量。这两个向量都包含指向结构外部动态内存的引用/指针。结构和两个向量都是在堆栈上创建的(在我的示例代码中(,向量的动态内存在堆上。
相关文章:
- 如何使用C++初始化向量;脚本化值不是数组、指针或矢量错误
- 在C++中初始化向量映射的最有效方法
- 我使用向量来创建类对象列表.初始化向量时如何使用参数调用构造函数?
- 用向量的向量元素初始化向量的空向量
- 初始化向量数组,其中每个向量的大小为 0
- 如何初始化向量<unordered_map<*,*>>
- 如何在元组初始化向量中删除样板?
- C++ 通过函数声明后初始化向量
- 特征::向量;在函数中使用 Eigen::Matrix3f 的值初始化向量,大于 4 个条目
- 使用所述填充构造函数初始化向量中的向量
- 制作可用于初始化向量的迭代器
- 如何使用sregex_token_iterator对象初始化向量
- 用空向量 c++ 的 M 元素初始化向量
- 用reference_wrapper本地初始化向量
- 将向量元素与字符串元素进行比较,而不初始化向量
- 使用 reference_wrappers 初始化向量
- 从不同类型的容器的迭代器初始化向量
- 在具有容量/调整大小的类中初始化向量
- 在头文件中声明和初始化向量
- 错误:调用'begin(long double [nPoints])'没有匹配函数;使用硬编码的 int 与整数变量初始化向量