我遇到了这个问题,我的程序正常编译但是当我尝试运行它时出错了 “在抛出”Range_error“的实例后终止调用 what():范围错误:0 此应用程序已请求Runtime以不寻常的方式终止它。“
出现了。我的代码如下,我使用的是Windows 8,并使用GNU GCC编译器在CodeBlocks 13.12中进行编码。
> #include <iostream> #include <vector> #include <string> #include "std_lib_facilities.h"
>
> using namespace std;
>
> class Name_pairs{
> vector<string> name;
> vector<double> age;
>
> public:
> void read_names()
> {
> string control="yes";
> int i=0;
> while(control!="no")
> {
> cout<<"Insert a name "<<endl;
> cin>>name[i];
> cout<<"Do you want to introduce another name?"<<endl;
> cin>>control;
> }
> }
> void read_ages()
> {
> for(int i=0; i<=name.size();i++)
> {
> cout<<"introduce an age for "<<name[i]<<endl;
> cin>>age[i];
> }
> }
> void print()
> {
> for(int i=0;i<=name.size();i++)
> {
> cout<<name[i]<<", "<<age[i]<<endl;
> }
> }
> void Sort()
> {
> string tempn;
> double tempa;
> for(int i=0; i<name.size();i++)
> {
> for(int j=i+1;j<name.size();j++)
> {
> if(name[i]>name[j])
> {
> tempn=name[i];
> tempa=age[i];
> name[i]=name[j];
> age[i]=age[j];
> name[j]=tempn;
> age[j]=tempa;
> }
> }
> }
> }
> }; int main() {
> Name_pairs List;
> List.read_names();
> List.read_ages();
> List.Sort();
> List.print();
> return 0;
> }
如果有人可以提供帮助,请:D提前致谢。
答案 0 :(得分:0)
cin>>name[i];
当i
为空时,您正在分配向量name
的元素name
并没有元素。如果存在此类元素,则只能指定somevector[i]
。做
string s;
cin >> s;
name.push_back(s);
在最后添加一个新元素。
(顺便说一下,你永远不会在i
中增加read_names
,所以每个名字都是如此
将被分配到name[0]
,甚至覆盖以前的名称
如果元素name[0]
存在。)
此外,循环如下:
for(int i=0; i<=name.size();i++)
推进i
向量的第N个元素是N个元素的长度。
最后一个元素的索引是N - 1
,所以它们超过了
向量。应该是:
for(int i=0; i < name.size();i++)
就像你在Sort()