在for循环中创建对象

create object in for loop

本文关键字:创建对象 循环 for      更新时间:2023-10-16

我有下面的for循环,在这个foor循环中,我创建了一个对象kw。

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循环存在问题。我想如果我把Keywords从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);
    }

当我这样做的时候,我没有得到正确的输出。你能给我一个提示吗?谢谢。

哈尼。

该类用于从xml文件中提取关键字。我提供了:

  • 类构造函数
  • 复制构造函数
  • 沉降器和吸气器
  • 破坏者

你认为复制构造函数有问题吗

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)
{
}

kw在第二个代码中只分配一次,但在每个循环迭代的第一个代码中分配

在非运行时关键代码中,以RAII方式构造对象是一种很好的做法。