我遇到了一個問題,試圖將我的算法推廣到任意大小的問題。 該代碼正在爲我使用的測試問題工作,但我不得不手動插入某些數組的長度。接下來,我試着在兩個變量中讀取輸入文件的長度,但後來我無法在我的所有代碼中使用它們,但只是在一些片段中。我認爲這是一件相當愚蠢的事情,但我對C++非常陌生,我希望得到幫助。 下面是一段代碼:取決於文件長度的可變長度數組C++
#include <fstream>
#include <iostream>
#include <time.h>
using namespace std;
struct node{
int last_prod;
int last_slot;
float ZL;
float ZU;
float g;
bool fathomed;
node *next;
node *padre;
node *primofiglio;
};
clock_t start, end;
double cpu_time_used;
int l=0;
int cont_slot=0;
int cont_prod=0;
float temp_cont;
float distanze[360]; // dichiarazione variabili
int slot[111];
int slot_cum[111];
float COIp[111];
int domanda[111];
float Zb=9999999999999999;
float LowerBound(struct node *n);
float UpperBound(struct node *n);
float h(struct node *l,struct node *n);
void creasottolivello(struct node *n);
void fathRule2(struct node *n);
void fathRule3(struct node *n);
void stampaRisultati(struct node *n, ofstream &f);
int unFathomedNodes(struct node *n);
void append(struct node* temp, struct node* n);
void ricercaOttimo(struct node *n, ofstream &f);
void calcoloBounds(struct node *n);
int main(){
start = clock();
ifstream contdist_file ("/Users/MarcoBi/Desktop/TESI di LAUREA/Xcode/dati/distanze.txt" ); // conteggio dati input
if (!contdist_file.is_open()) { //conta righe file slot
}
else {
for(int i=0; !contdist_file.eof(); i++){
contdist_file >> temp_cont;
cont_slot++;
}
}
ifstream contslot_file ("/Users/MarcoBi/Desktop/TESI di LAUREA/Xcode/dati/slot.txt");
if (!contslot_file.is_open()) { //conta righe file prodotti
}
else {
for(int i=0; !contslot_file.eof(); i++){
contslot_file >> temp_cont;
cont_prod++;
}
}
....
正如你所看到的,在main()我計數輸入文件的lenght到cont_prod和cont_slot變量,但我不能在變量聲明中使用它們。我需要的變量長度數組必須是全局變量'cuz我也需要它們在其他函數中。而且cont_prod和cont_slot需要是全局的,因爲我需要它們在某些函數的局部變量聲明中。 這裏是我需要使用它們的功能之一:
float LowerBound(struct node *n){ //funzione LowerBound
int S[111];
int Sp=0;
float d[111];
float dmin[111];
float D;
float LB;
for(int i=n->last_prod;i<111;i++){
Sp=Sp+slot[i];
}
for(int i=0;i<111;i++){ //Calcolo S_pigreco
S[i]=0;
}
if(n->last_prod==0){ //condizione necessaria per nodo radice
S[0]=slot[0];
for(int i=n->last_prod +2;i<111;i++){
for(int j=n->last_prod +1;j<=i;j++){
S[j]=S[j-1]+slot[j];
}
}
}
else{
for(int i=n->last_prod +1;i<111;i++){
for(int j=n->last_prod;j<=i;j++){
S[j]=S[j-1]+slot[j];
}
}
}
S[110]=S[109] + slot[110];
//calcolo somma distanze da slot j+1 a q
for(int i=0;i<111;i++){
d[i]=0;
}
for(int j=n->last_prod;j<111;j++){
for(int i=n->last_slot; i < n->last_slot +S[j]; i++){
d[j]=d[j]+distanze[i];
}
}
//calcolo dmin_pigreco
for(int i=n->last_prod; i<111; i++){
dmin[i]= d[i]/S[i];
}
D=0;
for(int i=n->last_prod; i<111; i++){
D=D+dmin[i]*domanda[i];
}
LB=n->g+2*D;
return LB;
}
111 cont_prod和360是cont_slot。 我在Xcode上的Mac上進行編程,它說變量長度數組不能在文件範圍聲明,我認爲它意味着全局變量。 我該如何管理?
這是一大塊代碼。你能否刪除對你的問題不重要的一切? – celtschk 2012-04-02 10:44:06
你寫了'我需要的變量長度數組必須是全局變量'因爲我需要他們也在其他函數中。請注意,處理這種情況的更好方法是將所需的數組作爲參數傳遞給每個函數。它避免了對全局變量的需求,並且函數簽名清楚地表達了依賴關係(以及其他很多優點)。 – 2012-04-02 10:46:14