您好我正在尝试创建一个非常简单的矢量程序来接受整数,然后在提示时,以c ++显示最大的。然而,我是新手,不可避免地做了一件事。如上所述,它抛出错误'std :: out_of_range'what():_ M_range_check,并且在提示中断之前接受值。但即使在浏览了这个论坛很长一段时间后,我也无法弄清楚原因。在此先感谢您的帮助。
#include <iostream>
#include <vector>
using namespace std;
int inputVector (vector<int>); //prototype functions
void sortVector (int,vector<int>&files);
void displayVector (vector<int>&files);
int main()
{
int vectorsize=(0);
vector <int>files;
files.reserve(10);
vectorsize=inputVector (files);
sortVector (vectorsize, files);
displayVector (files);
return 0;
}
void displayVector(vector<int>& files)
{
cout << " The largest file size is " << files.at(0);
}
int inputVector(vector<int>files)
{
int file=0;
int vectorsize;
cout << "Enter file sizes in Megabytes, file size has to be 1 or greater, hit 0 to display max value " << endl;
do
{
cin >> file;
if (file==0)
{
break;
}
else
{
files.push_back(file) ; //sends value to the vector
cout << files.size() << endl;
}
}
while (file>0);
vectorsize=files.size();
return vectorsize;
}
void sortVector(int vectorsize,vector<int>&files)
{
int maximum;
for( int j=0;j<vectorsize;j++)
{
for(int i=0;i<(vectorsize-1);i++)
{
if(files.at(i)< files.at(i+1))
{
maximum=files.at(i);
files.at(i)=files.at(i+1);
files.at(i+1)=maximum;
}
}
}
}
答案 0 :(得分:1)
inputVector
按值获取向量,因此它正在修改副本。通过引用传递它。此外,您无需传递矢量大小,因为您只需拨打size()
。
答案 1 :(得分:0)
您的vectorsize
错了,因此您的电话
files.at(i); // in sortvector()
导致超出范围的错误。实际的矢量大小为0
,但您的程序假设了其他内容。这是因为将vector
by值传递给函数vectorinput()
:在返回该函数时,原始向量未被更改,返回的vectorsize
无意义。
做你想做的事情,而不是
#include <iostream>
#include <vector>
#include <algorithm>
void inputVector (vector<int>&);
int main()
{
vector<int> files;
inputVector(files);
// std::sort(files.begin(),files.end(),std::greater<int>()); // not needed
std::cout << " The largest file size is "
<< std::max_element(files.begin(),files.end()) << std::endl;
}
void inputVector(vector<int>&files)
{
std::cout << "Enter file sizes in Megabytes, file size has to be 1 or "
"greater, enter 0 to display max value " << std::endl;
files.reserve(10); // not really needed
while(true) {
int file;
std::cin >> file;
if (file>0) {
files.push_back(file);
// std::cout << files.size() << std::endl; // for debugging
} else
break;
}
}
但是,当然,如果您只想找到最大值,则无需将文件大小存储在矢量中。