-2

我有以下for循环,在这个for循环中我创建了一个对象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 循环有问题。我认为如果我将关键字从 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)
{

}
4

1 回答 1

3

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

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

于 2013-08-01T21:23:01.247 回答