【发布时间】:2020-07-06 12:14:29
【问题描述】:
我遇到了std::vector 类的问题,我创建了一个struct
struct Triplet{
int first;
int second;
int third;
};
我创建了一个vector<Triplet> T。
我的问题是它不会包含我需要的尽可能多的元素,即使 T.max_size() = 357913941 我只有 T.size() = 60540697 或 T.size() = 40360465 使用该功能
vector<Triplet> T;
while(true)
{
Triplet t;
t.first = 1; t.second = 1 ; t.third = 1;
try {
T.push_back(t);
} catch (...) {
break;
}
}
qDebug() << T.size();
谁能解释一下为什么要这样做? 我在 Windows 10 和 16Go 的 RAM 上运行,使用 Qt 和 VSC++ 2017 x86(由于我无法为 x64 编译的 Lemon 库),
【问题讨论】:
-
您应该捕获并打印您的异常以确定发生的哪个错误会破坏您的 while。
-
这个问题不是一个好的骗子,但这个答案适合:stackoverflow.com/a/3813203/4117728 TL;DR:早在你到达
max_size之前,你的内存就会用完 -
这能回答你的问题吗? C++ vector max_size();
-
如果您的 int 是 4 字节并且填充使您的 struct 为 4 个 int,则您有大约 1G 的数据。不知道 32 位 win 的内存布局是什么,但 malloc 的最大块大小可能是 1G。
-
同样使用
reserve规划所需大小,可以提高向量的速度和实际最大容量。