В программе, которую я пишу, у меня есть что-то похожее на код здесь:
#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:;
}
}
}
Как видите, я возвращаю структуру (people youngling
) в вектор (* 1005)*).Однако этот код дает мне неправильные результаты, и я думаю, что это может быть вызвано структурой и проблемой мелкого копирования.Это несколько доказано, поскольку, если я буду использовать полный массив people
для хранения ввода, ответ будет правильным.Но я озадачен этим:
- Является ли struct просто указателем на компилятор, или почему существует эта проблема поверхностного копирования?
- Я объявляю
people youngling
внутри внутреннегоЦикл, надеясь решить эту проблему, но бесполезно.Есть ли какой-нибудь простой способ исправить приведенный выше фрагмент кода? - Когда я тестирую небольшие случаи с использованием GCC 4.4, ответ кажется правильным.Однако, когда я тестирую его с использованием gnu C ++ 0X, ответ неверный.Это проблема, связанная с компилятором?
Примечание: я не могу предоставить неправильный контрольный пример, так как я тестирую его онлайн с помощью системы судей.