所以我有一個項目,旨在讓用戶輸入一個選項運上取決於矢量將使用它的類型,即vector<int>
vector<float>
和vector<double>
。的std ::矢量內存問題
要做到這一點,我創建了3種功能,這將取決於運被調用,它的工作原理是這樣的:
#include <iostream>
#include <vector>
using namespace std;
typedef vector<int> intv;
typedef vector<float> flov;
typedef vector<double> douv;
intv vectori(int opt, int t);
flov vectorf(int opt, int t);
douv vectord(int opt, int t);
int main(){
int opt;
size_t t;
cout << "Size: \n";
cin >> t;
cout << "Option? \n";
cin >> op;
flov vf;
douv vd;
intv vi;
switch (op){
case 00:
vi.reserve(t);
vi=vectori(0,t);
break;
case 01:
vf.reserve(t);
vf=vectorf(0,t);
break;
case 02:
vd.reserve(t);
vd=vectord(0,t);
break;
}
}
這將是例如vectori功能:
intv vectori(int op, int t)
{
intv v;
v.reserve(t);
// Do stuff
return v;
}
而示例vectorf函數是類似的(因此是vectord):
flov vectorf(int op, int t)
{
flov v;
v.reserve(t);
// Do stuff
return v;
}
所以問題是:
- 什麼說法矢量VF的內存成本,考慮到如果不需要的話,我沒有爲它預留的內存。
- 變量v一旦函數vectorx結束會發生什麼?是否返回v並調用它vi在內存中創建v的副本?
- 這是整體記憶效率?
'reserve'您使用的方式太多,有些是多餘的,這不會有幫助。更好的是你分析它並親眼看到。如果不運行它,沒有辦法預測效率。那些通過查看代碼來預測的人只是自欺欺人。 – DumbCoder 2015-02-09 09:30:21
爲什麼要在'case'中使用八進制? – 2015-02-09 10:48:53
不是真的,我已經複製了一小部分代碼,使用八進制作爲演示目的。 (使用cout時)。 – D1X 2015-02-10 12:26:28