Home > Mobile >  Most efficient way to move last n chars to another string
Most efficient way to move last n chars to another string

Time:12-16

This is in a way related to my other question.

My task is to take last times characters of string str and add them to string removed, and to remove those characters from str.

My idea was to do one memory allocation, iterate over times characters of str one time. That's what I am doing in the code below, assigning to removed index by index and popping from str per iteration.

int times = std::stoi(arg); // arg is const std::string &        
std::string removed;
removed.resize(times); 
while (times > 0)
{
    removed[times-1] = str.back();
    str.pop_back();
    --times;
}

Question: what is the most efficient (without excessive copying, iterating several times, etc.) and elegant way to do this?

CodePudding user response:

I would do some checking before hand to make sure times <= str.size() but as long as it is this can be done pretty simple using append and erase like

removed.append(str.end() - times, str.end()); // adds the end of str to removed
str.erase(str.end() - times, str.end()); // removes the end from str

CodePudding user response:

I'd probably use substr and resize:

if(str.size() >= times) {
    std::string removed = str.substr(str.size() - times);
    str.resize(str.size() - times);
}
  • Related