На самом деле есть функция, аналогичная несуществующей std::string::push_front
, см. Пример ниже.
Документация по std :: string :: insert
#include <iostream>
#include <string>
int
main (int argc, char *argv[])
{
std::string s1 (" world");
std::string s2 ("ello");
s1.insert (0, s2); // insert the contents of s2 at offset 0 in s1
s1.insert (0, 1, 'h'); // insert one (1) 'h' at offset 0 in s1
std::cout << s1 << std::endl;
}
вывод:
hello world
Поскольку добавление строки с данными может потребовать как перераспределения, так и копирования / перемещения существующих данных, вы можете получить некоторые преимущества в производительности, избавившись от части перераспределенияс помощью std::string::reserve
(чтобы выделить больше памяти перед рукой).
К сожалению, копирование / перемещение данных неизбежно, если только вы не определите свой собственный класс, который действует как std::string
, который выделяет большой буфери помещает первый контент в центр этого буфера памяти.
Затем вы можете как добавлять, так и добавлять данные без перераспределения и перемещения данных, если буфер достаточно большой, то есть.Копирование из источника в места назначения , очевидно, все еще необходимо.
Если у вас есть буфер, в котором вы знаете, вы prepend данных чаще, чем вы добавьте хорошая альтернатива - хранить строку в обратном направлении и при необходимости переворачивать ее (если это случается реже).