我正在測試一個簡單的代碼的時間,我沒有看到區別。 在第一個塊中,它的作用就像只有指針被傳遞,在情況2和3中,它的作用就像通過值而不是引用來複制整個結構。 編輯::: 結構:將struct傳遞給一個函數C++(效率)
struct e{
vector<int> a;
};
這段代碼使用0秒:
void ola(e &a)
{
a.a[0] = 1;
a.a[9999] = 1;
}
int main()
{
e *a;
a->a.resize(10000000, 0);
a->a[0] = 2;
a->a[99999] = 2;
ola(*a);
cout << a->a[0] << " . " << a->a[99999] << endl;
letras.resize('z' - 'a' + 1);
string entrada;
}
這其中需要0.15秒:
void ola(e &a)
{
a.a[0] = 1;
a.a[9999] = 1;
}
int main()
{
e a;
a.a.resize(10000000, 0);
a.a[0] = 2;
a.a[99999] = 2;
ola(a);
cout << a.a[0] << " . " << a.a[99999] << endl;
letras.resize('z' - 'a' + 1);
string entrada;
}
但不應該有任何區別。也許是因爲在裝配有路過的時候它來複制結構的所有值,所以我嘗試這一個:
void ola(e *a)
{
a->a[0] = 1;
a->a[9999] = 1;
}
int main()
{
e a;
e* b;
a.a.resize(10000000, 0);
b = &a;
a.a[0] = 2;
a.a[99999] = 2;
ola(b);
cout << a.a[0] << " . " << a.a[99999] << endl;
letras.resize('z' - 'a' + 1);
string entrada;
}
在最後一個我只傳遞一個指針,它需要0,15sec了。爲什麼我看到這種差異?
1.在第一個代碼塊中,「a」未初始化,但您將其解除引用。 2.如果你測量的東西爲0秒,你做錯了。 – MooseBoys
0秒意味着它快,它說0,它可能是0.005秒,順便說一句,添加結構信息@MooseBoys –
這種類型的問題的一般建議是,你應該比較你的編譯器生成的彙編程序。對於gcc,你可以使用-S編譯標誌。 – robal