我想删除String数组中的所有元素,例如:
String example[]={"Apple","Orange","Mango","Grape","Cherry"};
Run Code Online (Sandbox Code Playgroud)
有没有简单的做法,它上面的任何片段都会有所帮助.谢谢
我正在尝试一个词法分析器,我发现在程序的一个部分中从while循环切换到if语句和do-while循环导致代码变得快20%,这看起来很疯狂.我将编译器生成的代码的差异隔离到这些汇编代码段.有谁知道为什么快速代码更快?
在程序集中,'edi'是当前文本位置,'ebx'是文本的结尾,'isAlpha'是一个查找表,如果字符是字母,则为1,否则为0.
慢代码:
slow_loop:
00401897 cmp edi,ebx
00401899 je slow_done (4018AAh)
0040189B movzx eax,byte ptr [edi]
0040189E cmp byte ptr isAlpha (4533E0h)[eax],0
004018A5 je slow_done (4018AAh)
004018A7 inc edi
004018A8 jmp slow_loop (401897h)
slow_done:
Run Code Online (Sandbox Code Playgroud)
快速代码:
fast_loop:
0040193D inc edi
0040193E cmp edi,ebx
00401940 je fast_done (40194Eh)
00401942 movzx eax,byte ptr [edi]
00401945 cmp byte ptr isAlpha (4533E0h)[eax],0
0040194C jne fast_loop (40193Dh)
fast_done:
Run Code Online (Sandbox Code Playgroud)
如果我只针对仅包含字母"a"的兆字节文本运行这些汇编代码段,则快速代码的速度提高30%.我的猜测是慢速代码由于分支错误预测而变慢,但我认为在循环中这是一次性成本.
这是我用来测试两个片段的程序:
#include <Windows.h>
#include <string>
#include <iostream>
int main( int argc, char* argv[] )
{
static char …Run Code Online (Sandbox Code Playgroud) 从内存生成32位元素的stride-3集合的最有效序列是什么?如果内存安排如下:
MEM = R0 G0 B0 R1 G1 B1 R2 G2 B2 R3 G3 B3 ...
Run Code Online (Sandbox Code Playgroud)
我们想获得三个YMM寄存器,其中:
YMM0 = R0 R1 R2 R3 R4 R5 R6 R7
YMM1 = G0 G1 G2 G3 G4 G5 G6 G7
YMM2 = B0 B1 B2 B3 B4 B5 B6 B7
Run Code Online (Sandbox Code Playgroud)
标量C代码就像
template <typename T>
T Process(const T* Input) {
T Result = 0;
for (int i=0; i < 4096; ++i) {
T R = Input[3*i];
T G = Input[3*i+1];
T B …Run Code Online (Sandbox Code Playgroud) 我必须用两个默认参数编写构造函数.
func(int arg1 , char* arg2 = "arg2", int arg3 = 1) //example
Run Code Online (Sandbox Code Playgroud)
我提供了一个方案,其中调用构造函数并给出一个值arg1,arg2并且arg3预期使用默认值.然后另一个对象被实例化和一个值被提供给arg1和arg3,以及用于默认值arg2预计使用.现在问题是,你"不能跳过"默认参数是我从文本和在线阅读.它的意思是从默认参数的重载中排序,但是场景使用了一个默认参数,而另一个则没有.这个问题的提示告诉我重新排序参数/参数.但是,我所做的任何重新排序似乎都无法解决此问题.
此外,不能使用重载的构造函数.这必须由一个构造函数完成.
那怎么会这样呢?我很难过,有点疯狂:(
我正在使用Ubuntu 10.10(64位),gcc我想在我的C++程序中使用64位整数.
在我的系统的输出sizeof(long), sizeof(long long int)并且sizeof(int64_t)是所有8个字节(64位).
您推荐使用64位整数的限定符(long,long long或int64_t)?
我尝试bad_alloc通过传递一些否定参数来测试异常new[].当传递小的负数时,我得到了我所希望的 - a bad_alloc.但是,在传递时-1,我可以看到我的对象构造了数千次(我在构造函数中打印静态计数器),应用程序终止于segfault.
new[]转换有符号整数size_t,所以-1是最大size_t且-2是maximum - 1等.
那么为什么new[]在接收一些巨大的数字时抛出异常,但是在接收到最大值时会尝试分配size_t?是什么区别1111...1,并1111...0为new[]?:)
提前致谢!
我在许多不同的物理服务器上有一个大的分布式程序,每个程序产生许多线程,每个线程Math.random()在其操作中使用从许多公共资源池中抽取一块.
目标是在所有操作中均匀地使用池.有时,通过查看资源池上的快照看它在那一瞬间得到哪些部分(实际上可能是这样,但很难测量并确定),它似乎并不是随机的.
是否有比这更好的东西Math.random()(至少不是更糟)?
以下GCC __attribute__(packed )将打包到字节边界,对齐用于以下目的: -
u8 rx_buf[14] __attribute__((aligned(8)));
struct S { short f[3]; } __attribute__ ((aligned (8)));
Run Code Online (Sandbox Code Playgroud)
上面的数组将是16字节,我是对的.
意味着sizeof(rx_buff)将是16字节..即结束时2字节对齐
我已经编写了这段代码,但它耗费了大量的时间来计算......你能帮我找到一个有效的方法吗?
int tag;
int* factors(int n)
{
int a[1000000];
for(int i=1;i<=n/2;i++)
if(n%i==0)
a[++tag]=i;
a[++tag]=n;
return(a);
}
Run Code Online (Sandbox Code Playgroud)
这种蛮力方法在复杂性方面非常沉重......对于这个问题,有没有更好的可行解决方案?
我想询问是否有更快的方法来进行音频转换,而不是逐个迭代所有值并将它们除以32768.
void CAudioDataItem::Convert(const vector<int>&uIntegers, vector<double> &uDoubles)
{
for ( int i = 0; i <=uIntegers.size()-1;i++)
{
uDoubles[i] = uIntegers[i] / 32768.0;
}
}
Run Code Online (Sandbox Code Playgroud)
我的方法很好,但它可以更快.但是我没有找到任何方法来加快速度.
感谢您的帮助!
c++ ×6
c ×3
java ×2
performance ×2
x86 ×2
64-bit ×1
algorithm ×1
arrays ×1
avx2 ×1
bad-alloc ×1
clear ×1
default ×1
factors ×1
gcc ×1
lexer ×1
long-integer ×1
new-operator ×1
numbers ×1
optimization ×1
parameters ×1
random ×1