初始化后来自 valarray 的错误值<int>

Wrong value from valarray<int> after initialization

本文关键字:lt int gt 错误 后来 valarray 初始化      更新时间:2023-10-16

我正在尝试使用std :: valarray设置一些初始值。打印数组值,我得到的与我的期望不同。我在Windows(10)上带有CodeBlocks(GCC 4.9.2,C 11构建选项)。

这是代码:

#include <iostream>
#include <string>
#include <valarray>
void print(std::string aname, std::valarray<int> & va)
{
    std::cout << aname << "[ ";
    for(auto &i : va)
    {
        std::cout << va[i] << ' ';
    }
    cout << ']'<< endl;
}
int main()
{
    std::valarray<int> one { 1, 0, 0 };
    std::valarray<int> two  { 0, 1, 0 };
    std::valarray<int> three { 0, 0, 1 };
    std::cout << std::endl;
    print("one", one);
    print("two", two);
    print("three", three);
    return 0;
}

输出为:

one[ 0 1 1 ]
two[ 0 1 0 ]
three[ 0 0 0 ]

当您使用这种循环时:

for(auto &i : va)

i接收VA的内容,因此,显示它的正确方法是:

std::cout << i << ' ';   // not va[i]