C++:程序在矢量填充和搜索过程中失败

C++ : Program fails during vector filling and searching

本文关键字:搜索 过程中 失败 填充 程序 C++      更新时间:2024-04-27

我正在练习C++ vector,作为一项练习,我想用1600万个随机数填充一个向量,然后找到一个数字第一次出现的位置。到目前为止,我实现的代码是:

int getIndexOf(std::vector<int>& v, int num) {
for(std::size_t i=0; i < v.size(); i++) {
if(v.at(i) == num) {
return i;
}
}
return -1;
}
int main() {
int searchedNumber = 42;
int vectorSize = 16000000;
std::vector<int> v(vectorSize);
for(std::size_t i=0; i < v.size(); i++) {
v.push_back(rand() % 10000000);
}
//Linear search
auto start = std::chrono::high_resolution_clock::now();
int position = getIndexOf(v, searchedNumber);
auto stop = std::chrono::high_resolution_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::seconds>(stop - start);
std::cout << "The linear search took: " << duration.count() << " seconds" << std::endl;
std::cout << "The number " << searchedNumber << " occur first at position " << position << std::endl;
return 0;
}

此外,我测量时间只是为了一些统计数据。问题是程序崩溃,出现错误bad_alloc,我将其链接到堆栈空间不足。因此,最初我认为,当向量在堆栈上时,用这么多数字填充向量将是崩溃的原因,我动态地创建了向量(指针(。然而,我仍然会遇到同样的错误。这可能是什么原因?

int vectorSize = 16000000;
std::vector<int> v(vectorSize);
for(std::size_t i=0; i < v.size(); i++) {
v.push_back(rand() % 10000000);
}

这部分不好。push_back()将一个元素添加到向量中,因此它增加了size()。因此,这个循环不会终止,直到发生不好的事情。

你应该这样做:

int vectorSize = 16000000;
std::vector<int> v;
v.reserve(vectorSize); // allocate memory without actually adding elements
for(int i=0; i < vectorSize; i++) { // use the known size
v.push_back(rand() % 10000000);
}