c++ - fill_n() 不允许更改变量值

标签 c++ arrays initialization

我正在使用 fill_n() 函数来初始化我的数组值,但是我无法更改数组的值,它始终是初始值。

谁能解释一下这是为什么?

#include<iostream>
#include<ctime>


int main(){

    //Matrix 
    int m[3][3] = {{1,0,0},{0,1,0},{0,0,1}};
    int v[3] = {5,6,7}; 
    int result[3];// = {0,0,0};
    int n = 0, i, j;

    std::fill_n(result,sizeof(result),0);

    clock_t time = clock();

    while(n<1000){
        n++;
        for(i=0;i<3;i++){
            for(j=0;j<3;j++){
                result[j] = result[j]+(v[i]*m[j][i]); //changing the values here.
            }
        }
    }

    time = clock() - time;

    for(i=0;i<3;i++){
    std::cout<<result[i]<<"\n";
    }

    std::cout<<"Execution time: "<<((float)time)/CLOCKS_PER_SEC<<"\n";

    return 0;
}

代码的输出始终为 0。

最佳答案

通过 std::fill_n(result,sizeof(result),0); 你要求用 0 填充第一个 sizeof(result) 元素。

但是,result 中只有 3 个元素可用。因此,您越界编写并导致未定义的行为。您应该改为编写 std::fill_n(result, sizeof(result)/sizeof(result[0]), 0);

请注意,sizeof(result)字节而非元素返回result的大小。 p>

关于c++ - fill_n() 不允许更改变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30463423/

相关文章:

c++ - 如何在 std::cout 中既不以科学形式也不以定点表示法输出 float ?

ios - 如何使用enum获取字符串值

c++ - 在 memset 等上使用结构初始化 ({...}) 是否更可取/可以?

c++我可以用double初始化一个float类型的变量吗?

C++ Cout & Cin & 系统 "Ambiguous"

c++ - 使用 __m64 引用将 C++ 项目转换为 x64

c++ - cout 不在 Qt Creator 中打印

javascript - 在对象数组中查找匹配 id 的最佳方法?

字符串指针数组的值可以被覆盖吗?

c++ - 类型名称后的括号是否与 new 有所不同?