为什么我的C ++向量要调整大小并附加一个新向量,而不是在原地更改?

时间:2018-11-13 14:39:04

标签: c++ c++11

我在做一些LeetCode问题,我不确定为什么我的向量要调整大小。这是我的代码的相关部分:

    void turnToString(std::vector<int> & charFreq, std::string & freqStr)
    {
        for(int i : charFreq)
            freqStr.append(std::to_string(i));
        std::cout << freqStr << std::endl;
    }

    std::vector<int> charFreq (26,0);
    for(int i = 0, j = p.size() - 1; j < s.size(); i++, j++)
    {
        charFreq[s[j] -'a']++;
        turnToString(charFreq, str);
        if(str == freqStr)
            res.push_back(i);
        charFreq[s[i]-'a']--;
    }

一切都可以编译,但是在我的turnToString()函数中,当我将频率向量打印为字符串时,它会不断加倍: output

我不确定为什么会这样。我的目的是使向量保持大小为26,并在迭代“ s”时更改其频率。相反,它向我的向量添加了一个新的频率数组。我知道我可以通过使用常规数组来解决此问题,但我想我会以此为学习机会。为什么会发生这种情况,我该怎么做才能使用其他数据结构来解决此问题?

1 个答案:

答案 0 :(得分:0)

对于charFreq中的每个条目,请将其附加到freqStr:

freqStr.append(std::to_string(i));

因此str(在函数外部)将越来越多。