gpt4 book ai didi

c++ - std::bad_alloc 当我忘记递增迭代器时

转载 作者:行者123 更新时间:2023-11-28 04:11:35 25 4
gpt4 key购买 nike

关于下面的一段代码,我有两个问题。首先,我最初忘记增加循环,结果我在运行代码时得到了 std::bad_alloc。调试后我不太明白为什么错误会导致该错误。

我的第二个问题是,是否存在一种比 vector 更有效的方法来存储 pcl::PointXYZ 类型的对象?我可以避免复制它们吗?

#include <unordered_set>
#include <random>
#include <algorithm>
#include <vector>

// Sample without replacement over a range using Bob Floyd's algorithm
std::unordered_set<int> sampleWithoutReplacement(int sampleSize, int rangeUpperBound)
{
std::unordered_set<int> sample;
std::default_random_engine generator;

for(int d = rangeUpperBound - sampleSize; d < rangeUpperBound; d++)
{
int t = std::uniform_int_distribution<>(0, d)(generator);
if (sample.find(t) == sample.end() )
sample.insert(t);
else
sample.insert(d);
}
return sample;
}

unsigned maxIterations {100};
while(maxIterations--)
{
std::unordered_set<int> inliers;
std::unordered_set<int> sampleIndices = sampleWithoutReplacement(sampleSize, cloudSize);
std::vector<pcl::PointXYZ> samplePoints {};
for (auto it { sampleIndices.begin() }; it != sampleIndices.end(); ++it)
{
samplePoints.push_back(cloud->points.at(*it));
}
// some other code that uses samplePoints.

}

最佳答案

关于你的第一个问题,你可以看看cppreference并看到当分配失败时抛出 std::bad_alloc 。从本质上讲,您已经通过不断推送到 vector 而耗尽了内存。

至于总内存开销,您在现代系统上不会真正看到明显的差异。如果我们是技术人员,并且您知道要存储多少元素的确切大小,那么数组在内存上会更有效。如果您关心查找元素需要多长时间,std::map 比 std::vector(std::map 的 O(logn) 和 std::vector 的 O(n))更快。

关于c++ - std::bad_alloc 当我忘记递增迭代器时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57667569/

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