我刚刚StringBuilder第一次遇到并且感到惊讶,因为Java已经有一个非常强大的String类允许追加.
为什么选择String二等?
我在哪里可以了解更多信息StringBuilder?
从C++ 1z开始,我们可以std::string_view轻松地查看连续的字符序列,避免不必要的数据复制.const std::string&现在经常建议使用,而不是使用参数std::string_view.
但是,很快就会发现切换const std::string&到std::string_view使用字符串连接的中断代码,因为不支持连接std::string和std::string_view:
std::string{"abc"} + std::string_view{"def"}; // ill-formed (fails to compile)
std::string_view{"abc"} + std::string{"def"}; // ill-formed (fails to compile)
Run Code Online (Sandbox Code Playgroud)
为什么不支持连接std::string和std::string_view标准?
考虑一下这段代码:
public String joinWords(String[] words) {
String sentence = "";
for(String w : words) {
sentence = sentence + w;
}
return sentence;
}
Run Code Online (Sandbox Code Playgroud)
在每个串联上创建一个新的字符串副本,以便整体复杂化O(n^2).幸运的是,在Java中,我们可以使用a来解决这个问题,每个附加StringBuffer都有O(1)复杂性,然后整体复杂性就是这样O(n).
虽然在C++中,std::string::append()有复杂性O(n),而且我不清楚它的复杂性stringstream.
在C++中,是否存在StringBuffer具有相同复杂性的方法?
当我std::unordered_map使用基于for循环的范围迭代两次时,顺序是否保证相等?
std::unordered_map<std::string, std::string> map;
std::string query = "INSERT INTO table (";
bool first = true;
for(auto i : map)
{
if(first) first = false;
else query += ", ";
query += i.first;
}
query += ") ";
query += "VALUES (";
first = true;
for(auto i : map)
{
if(first) first = false;
else query += ", ";
query += i.second;
}
query += ");"
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,结果字符串应采用该形式.因此,重要的是两个时间,迭代的顺序是相同的.
INSERT INTO table (key1, key2, key3) VALUES (value1, value2, value3);
Run Code Online (Sandbox Code Playgroud)
这是用C++保证的吗?
我在网上看到的所有使用sprintf创建字符串的示例都使用静态声明的数组,其大小是固定的.
#include <stdio.h>
#include <math.h>
int main()
{
char str[80];
sprintf(str, "Value of Pi = %f", M_PI);
puts(str);
return(0);
}
Run Code Online (Sandbox Code Playgroud)
我希望能够以最简单的方式使用动态大小的数组来完成此操作.我必须编写一些代码来打印组成数组的值:
printf("id=%s %s-array is: ", id.value(), name);
for (unsigned int i = 0; i < depths.size(); i++) {
printf("%f,", depths[i]);
}
printf("\n");
Run Code Online (Sandbox Code Playgroud)
但是我不想用单独的printfs来做这件事.我希望能够将它全部放在一个适合我在运行时编写的字符串的缓冲区中.我倾向于认为sprintf是最好的方法,但如果有其他功能我可以在C++中使用.让我知道.
我正在分析一些高分辨率midi数据.我正在把它写到标准输出,但由于有太多的数据进入,所以在我做了实际动作之后它们需要几秒钟才能显示出来.
目前这一行写入命令行:
std::vector<unsigned char> message;
...
printf("W 1 = %03d, W 2 = %03d, W 3 = %03d \n",(int)message[2],(int)message2[1],(int)message2[2]);
Run Code Online (Sandbox Code Playgroud)