C++ 如何比for循环更有效地初始化阵列?c++;
目前,我正在通过创建for循环并将arr[I]=0来初始化数组。还有其他更有效的方法吗C++ 如何比for循环更有效地初始化阵列?c++;,c++,arrays,initialization,C++,Arrays,Initialization,目前,我正在通过创建for循环并将arr[I]=0来初始化数组。还有其他更有效的方法吗 Student::Student(){ name = "John"; for(int i = 0; i<sizeof(id);++i) { id[i] = '0'; } for(int i = 0; i<sizeof(testScore);++i) { testScore[i] = 0;
Student::Student(){
name = "John";
for(int i = 0; i<sizeof(id);++i)
{
id[i] = '0';
}
for(int i = 0; i<sizeof(testScore);++i)
{
testScore[i] = 0;
}
avgScore = 100;
grade = 'A';
}
Student::Student(){
name=“John”;
对于(int i=0;iLoop展开)
以下是循环展开的示例:
const int capacity = sizeof(id) / sizeof(id[0]);
const int fill_value = 0; // hopefully compiler assigns to a register.
int i = 0;
if (capacity & 3 == 0)
{
for (i = 0; i < capacity; i += 4)
{
id[i + 0] = fill_value;
id[i + 1] = fill_value;
id[i + 2] = fill_value;
id[i + 3] = fill_value;
}
}
// initialize remaining slots
for (; i < capacity; ++i)
{
id[i] = 0;
}
递增指针和延迟的操作仍然比让处理器比较值或更改程序计数器(分支)更快。您可以尝试
例如:
int arr1[12]={};//值:000000000000
std::array arr2={};//值:00000
通过这种方式,您可以跳过for循环,获得更干净的代码。Hi!这是什么编程语言?请将其添加到标记中。抱歉,它是cpp.memset,calloc,…您知道吗?或者它的使用效率可能更高。不用麻烦了。这是一个微优化。打印出汇编语言。然后提高优化级别打印汇编语言。对所有级别的优化都执行此操作。更有效的解决方案不是在构造时初始化数组;而是在输入过程中(如std::cin
)填充数组。零初始化可能会复制对数组的写入。
int * p = &id[0];
const int fill_value = 0;
*p++ = fill_value; *p++ = fill_value; *p++ = fill_value; *p++ = fill_value;
*p++ = fill_value; *p++ = fill_value; *p++ = fill_value; *p++ = fill_value;
*p++ = fill_value; *p++ = fill_value; *p++ = fill_value; *p++ = fill_value;
*p++ = fill_value; *p++ = fill_value; *p++ = fill_value; *p++ = fill_value;
*p++ = fill_value; *p++ = fill_value; *p++ = fill_value; *p++ = fill_value;