4
在我寫程序,我有類似這裏的代碼的東西:是矢量::的push_back()進行淺拷貝和如何解決這個
#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
)返回到向量(vector<people> master
)。但是,這段代碼給了我錯誤的結果,我認爲這可能是由結構和淺拷貝問題造成的。這被證明有點,因爲如果我使用一整套people
來存儲輸入,那麼答案是正確的。但我對此感到困惑:
- 結構只是一個指向編譯器的指針,或者爲什麼存在這個淺拷貝問題?
- 我在內循環裏面聲明瞭
people youngling
,希望能解決這個問題,但是沒用。有沒有簡單的方法來糾正上面的代碼片段? - 當我使用GCC 4.4測試小案例時,答案似乎是正確的。但是,當我測試它使用GNU C++ 0X時,答案是錯誤的。這是編譯器特有的問題嗎?
注:我不能提供錯誤的測試用例,因爲我使用判斷系統在線測試它。
你需要找到一種方法來測試你的代碼,然後再提交它。 –
@Alan:我測試了小案例,但結果和存儲的信息都沒有錯誤。這是我弄糊塗的地方:( –
「gnu C++ 0X」是什麼意思? –