Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何比for循环更有效地初始化阵列?c++;_C++_Arrays_Initialization - Fatal编程技术网

C++ 如何比for循环更有效地初始化阵列?c++;

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;

目前,我正在通过创建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;
    }
    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;