2013-08-01 205 views
-2

我有以下for循環,在這個foor循環中創建一個對象kw。在for循環中創建對象

The class keywords (string, vector<pair<int,string>>, vector<string>) 

for(size_t i = 0; i < names.size();i++) 
{ 
     Keywords kw (names[i].c_str(),vreg, stopWords); 
     Document d = kw.extractKeywords(); 
     v_doc.push_back(d); 
} 

我認爲這個for循環存在問題。我認爲如果我把關鍵字從for循環中取出可能會更好,因爲我只需要創建一次該對象。

Keywords kw (vreg, stopWords); 
    for(size_t i = 0; i < names.size();i++) 
    { 

      Document d = kw.extractKeywords(names[i].c_str()); 
      v_doc.push_back(d); 
    } 

當我這樣做時,我得不到正確的輸出。你能不能給我一個提示,謝謝。

Hani。

該類用於從xml文件中提取關鍵字。我公司提供的:

  • 類的構造函數
  • 拷貝構造函數
  • getter和setter方法
  • 析構函數

你認爲存在拷貝構造函數問題

Keywords::Keywords(string xmlF,vector<pair<int, string>> re,vector<string> sw) 
{ 
    // Setter for string: the path of the xml File 
    setXml(xmlF); 
    // Setter for the vector<pair<int, string>> re 
    setRegularExpression(re); 
    //setter for vector<string> sw 
    setStopWords(sw); 
} 

//FREE MEMORY 
Keywords::~Keywords() 
{ 

    sw.clear(); 
    vreg.clear(); 
} 

void Keywords::setRegularExpression(vector<pair<int, string>> re) 
{ 
    vreg = re; 
} 

vector<pair<int, string>> Keywords::getRegularExpression() 
{ 
    return vreg; 
} 

void Keywords::setStopWords(vector<string> s) 
{ 
    sw = s; 
} 

vector<string> Keywords::getStopWords() 
{ 
    return sw; 
} 

void Keywords::setXml(string xmlF) 
{ 
    xmlFile = xmlF; 

} 

///COPY CONSTRUCTOR 
Keywords::Keywords(const Keywords& other):vreg(other.vreg),sw(other.sw) 
{ 

} 
+1

你真的*想要我們猜測關鍵詞類是什麼嗎?說真的,我們怎麼知道? – syam

+0

哦,等一下我會把代碼抱歉。我只是想知道這是否是一個很好的做法。 –

+0

哦確定有一個很好的做法「* that *」。唯一的(也是最重要的)問題是,什麼是「*那*」,究竟是什麼? ;) – syam

回答

3

kw已分配在第二個代碼中只有一次,但在每個循環迭代的第一個代碼中

在非運行時關鍵代碼中,以RAII方式構造對象是一種很好的做法。

+0

是的我只需要使用它一次。代碼的第一部分有問題嗎?我的意思是這是一個很好的做法? –