C++ std::超出范围:向量::超出范围检查
这是我的代码:C++ std::超出范围:向量::超出范围检查,c++,vector,C++,Vector,这是我的代码: #include <iostream> #include <stdexcept> #include <vector> #include <stdio.h> #include <stdlib.h> using namespace std; struct TeamS { int ID; string MEMBERS[3]; }; //Vector initialization void Initializ
#include <iostream>
#include <stdexcept>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
struct TeamS
{
int ID;
string MEMBERS[3];
};
//Vector initialization
void Initialize (vector<TeamS> & TeamV, const int id[], const string m[][3], int arraySize)
{
for(int i=0 ; i<4 ; i++)
{
TeamV.at(i).ID = id[i];
for(int j=0 ; j<3 ; j++)
{
TeamV.at(i).MEMBERS[j]=m[i][j];
}
}
}
void printList (const vector <TeamS>& TeamV)
{
for(int i=0 ; i<4; i++)
{
cout<<"Information for team "<<i<<endl;
cout<<TeamV[i].ID;
for(int j=0 ; j<3 ; j++)
{
cout<<" "<<TeamV[i].MEMBERS[j]<<" ";
}
cout<<endl;
}
}
int main(int argc, char** argv)
{
short int choice;
cout<<"Starting Initialization"<<endl;
vector<TeamS> TeamV;
const int ID [4] ={ 123, 321, 456, 789};
const string MEMBERS [4] [3] = { {"Sarah", "Joe", "John"}, {"Chris", "Kevin", "James"}, {"Tom", "Kim", "Emily"}, {"Jill", "Jason", "Jim"} };
cout<<"Ending Initialization"<<endl;
Initialize (TeamV, ID ,MEMBERS, 4);
cout<<"**** Team List **** "<<endl;
//printList(TeamV);
cout<<"************************************************************************"<<endl;
while(1)
{
cout<<"Enter 1 to see a list of teams"<<endl;
cout<<"Enter 2 to add a team to the list"<<endl;
cout<<"Enter 3 to search for a team using an ID"<<endl;
cout<<"Enter 4 to end the program"<<endl;
cout<<endl<<"Enter Choice : ";
cin>>choice;
if(choice == 1)
{ printList(TeamV); }
else if(choice == 2)
{ }
else if(choice ==3 )
{ }
else if(choice == 4)
{ exit(0); }
}
return 0;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
结构团队
{
int-ID;
字符串成员[3];
};
//向量初始化
无效初始化(向量和TeamV,常量int-id[],常量字符串m[][3],int-arraySize)
{
对于(int i=0;i而言,在任何时候,您都没有在向量上添加任何内容。您的Initialize()
以以下内容开头:
TeamV.at(i).ID = id[i];
但是如果TeamV
为空,则会将抛出范围之外
TeamV.push_back(TeamS()); // NOW, there's something in it
TeamV[i].ID = id[i];
最好向团队
添加一个构造函数,该构造函数接受一个id和一些成员,这样循环就可以:
for (int i = 0; i < 4; ++i) {
TeamV.push_back(TeamS(id[i], m[i]));
}
for(int i=0;i<4;++i){
团队V.推回(团队(id[i],m[i]);
}
或者在C++11中:
std::vector<TeamS> TeamV{
{123, {"Sarah", "Joe", "John"}},
{321, {"Chris", "Kevin", "James"}},
...
};
std::vector TeamV{
{123,{“莎拉”、“乔”、“约翰”},
{321,{“克里斯”、“凯文”、“詹姆斯”},
...
};
您似乎在main函数中创建了向量TeamV,并将其保留为空。它没有任何元素。但随后您调用了Initialize(TeamV,…)
函数您试图通过at()
访问TeamV的元素,但它是空的!已经得到我的支持,但我想补充一下如何完全取消init例程并执行静态向量init。附录:@NomanShakoor这可能是定义构造函数最简单的方法:团队(int-id,const-string(&members)[3])
。它不会捕获太小的团队,但会防止成员数组溢出。