这真的是一个问题,仅仅是出于我自己的兴趣,我无法通过文档来确定.
我在http://www.cplusplus.com/reference/string/string/上看到append有复杂性:
"未指定,但通常在新的字符串长度中达到线性."
而push_back()具有复杂性:
"未指定;通常摊销常数,但在新的字符串长度中达到线性."
作为一个玩具示例,假设我想将字符"foo"附加到字符串中.将
myString.push_back('f');
myString.push_back('o');
myString.push_back('o');
Run Code Online (Sandbox Code Playgroud)
和
myString.append("foo");
Run Code Online (Sandbox Code Playgroud)
完全一样的东西?或者有什么区别?您可能认为追加会更有效,因为编译器会知道将字符串扩展指定数量的字符需要多少内存,而push_back可能需要为每次调用保护内存?
我对C++编程的一些更高级的方面比较陌生,如果真的有必要在C++中分配内存(无论是通过malloc,new等),我都会遇到一些麻烦.例如在C中,我理解您需要分配内存以具有动态大小的数组或其他任务.在C++中,在我看来并非如此,你可以使用std :: vector,std :: string或其他已经按设计动态调整大小的内置方法.我也明白访问分配的内存比堆栈慢.
那么,有没有时候你必须在C++中分配内存,如果有的话,那些时代的例子是什么?这当然不包括C++代码必须与C程序交互的时间.我们假设程序纯粹用C++编写.
编辑:为了减轻混淆,我理解向量和其他结构正在分配自己的内存,但这是在幕后发生的事情,并不需要程序员使用new,malloc等,它会自动清理.所以我真正想知道的是,是否有必要在C++中手动执行内存管理
抱歉(可能)基本问题,但我刚刚开始使用 gnuplot。我想要的是创建一个轴标签,其中一部分为斜体。就像是:
xlabel:不是斜体,斜体
我知道设置一个标签来显示斜体很容易(设置 xlabel 字体“Times-Italic”,20),但是是否可以只用斜体显示标签的一部分?
这可能看起来有点像一个愚蠢的问题..也许是这样.但是我有一个我经常使用的功能,并且想知道这是否是最快的工作方式.该功能被使用了很多次,以至于任何速度增加实际上都是显而易见的.它只是检查一个字符是否是一个核苷酸(即:如果一个字符是'A','T','C'或'G'.
private static boolean isValidNucleotide(char nucleotide) {
nucleotide = Character.toUpperCase(nucleotide);
if(nucleotide == 'A') return true;
if(nucleotide == 'T') return true;
if(nucleotide == 'C') return true;
if(nucleotide == 'G') return true;
return false;
}
Run Code Online (Sandbox Code Playgroud)
这是完成这项工作的最快方式吗?或者您认为值得实现某种索引/地图/其他东西(可能在函数外部执行比较并将此文本复制到代码中的几个位置)?我真的不是Java中这类东西的专家.