Почему мой вектор C ++ изменяет размеры и добавляет новый вектор вместо того, чтобы изменить его на месте? - PullRequest
0 голосов
/ 13 ноября 2018

Я задаю несколько вопросов 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 голосов
/ 13 ноября 2018

Для каждой записи в charFreq вы добавляете эту запись к freqStr:

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

, поэтому str (вне функции) будет расти все больше и больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...