在 C++ 中的字符串开头插入字符的最快方法?
Fastest way to insert a character at the beginning of the string in C++?
所以在Leetcode上解决问题时遇到了这个问题。要正常生成字符串,我可以使用 str.push_back('a')。但是如果我想向后生成字符串,我会使用同样的方法并在最后反转字符串。使用 str.insert() 导致超出时间限制和 str='a'+str;会如预期的那样导致超出内存限制。想知道在C++中是否有一种简单的方法可以在字符串的开头插入一个字符
你说倒车已经回答了你自己的问题。只需使用 += 运算符追加然后反转即可。
另一种方式,首先将元素压入堆栈,然后弹出它们以填充字符串。
如果仍然很慢,则将输出分成小段并使用流水线将反转+追加部分隐藏延迟使用多线程。当一个线程正在反转一个段时,另一个线程可以创建另一个段。然后加入所有线程并加入它们的输出段以制作要转换为字符串的单个字符数组。如果每个段都是L1缓存的大小,那么逆向应该很快。
如果你不能使用线程,那么你仍然可以在 sse/avx 寄存器中进行反转,它们有随机命令可以帮助你使用指令级并行来隐藏延迟,除非它们更慢比 L1 访问。
所以在Leetcode上解决问题时遇到了这个问题。要正常生成字符串,我可以使用 str.push_back('a')。但是如果我想向后生成字符串,我会使用同样的方法并在最后反转字符串。使用 str.insert() 导致超出时间限制和 str='a'+str;会如预期的那样导致超出内存限制。想知道在C++中是否有一种简单的方法可以在字符串的开头插入一个字符
你说倒车已经回答了你自己的问题。只需使用 += 运算符追加然后反转即可。
另一种方式,首先将元素压入堆栈,然后弹出它们以填充字符串。
如果仍然很慢,则将输出分成小段并使用流水线将反转+追加部分隐藏延迟使用多线程。当一个线程正在反转一个段时,另一个线程可以创建另一个段。然后加入所有线程并加入它们的输出段以制作要转换为字符串的单个字符数组。如果每个段都是L1缓存的大小,那么逆向应该很快。
如果你不能使用线程,那么你仍然可以在 sse/avx 寄存器中进行反转,它们有随机命令可以帮助你使用指令级并行来隐藏延迟,除非它们更慢比 L1 访问。