In the program I'm writing, I have something similar to the code here:
#include<iostream> #include<vector> #include<cstring> using namespace std; struct people { string name; int st; int sn[50]; }; int main() { unsigned int n,ST[10]={25,18,15,12,10,8,6,4,2,1}; vector<people> master; cin>>n; for (int i=0;i<n;i++) { unsigned int m; cin>>m; for (int j=0;j<m;j++) { people youngling; //I am declaring it here, but it doesn't solve the issue string s; cin>>s; for (int l=0;l<master.size();l++) { if (master[l].name.compare(s)==0) { if (j<10) master[l].st+=ST[j]; master[l].sn[j]++; goto loop; } } youngling.name=s; if (j<10) youngling.st=ST[j]; for (int l=0;l<50;l++) youngling.sn[l]=0; youngling.sn[j]++; master.push_back(youngling); loop:; } } }
As you can see, I am returning a structure ( people youngling ) to a vector ( vector<people> master ). However, this code gives me the wrong results, and I think it could be caused by a structure and small copy problem. This is somewhat proven, because if I use the full array of people to store input, then the answer is correct. But I am puzzled by this:
- Is the struct just a pointer to the compiler or why does this small copy problem exist?
- I declare
people youngling inside the inner loop, hoping to solve this problem, but not use it. Is there an easy way to fix the code snippet above? - When I test small cases using GCC 4.4, the answer seems to be correct. However, when I test it, use gnu C ++ 0X, the answer is incorrect. Is this a problem for the compiler?
Note. I cannot provide the wrong test case, as I test it online using the judges system.
source share