为什么我会得到mask_array分配的不同行为?

问题描述

#include <valarray>  
#include<iostream> 

typedef std::valarray<int>    valarray_t;
typedef std::valarray<bool>   maskarray_t;

int main(void) {

  valarray_t::value_type   ibuf[10] = {0,1,2,3,4,5,6,7,8,9};
  valarray_t               vi1(ibuf,10);
  valarray_t               vi2(ibuf,10);
  

  // Create a valarray of bools for a mask.
  maskarray_t::value_type  mbuf[10] = {0,1};
  maskarray_t              mask(mbuf,10);
  
  maskarray_t::value_type  mbuf2[10] = {0,0};
  maskarray_t              mask2(mbuf2,10);
  
  // test 1:
   vi1[mask] = static_cast<valarray_t> (vi1[mask2]);
   std::cout << "vi1[mask] = vi1[mask2]\n\n" << vi1[0] <<'\t'<<vi1[1]<<'\t' <<vi1[2]<<'\t'<<vi1[3]<<'\t'<<vi1[4]<<'\t'<<vi1[5]<<'\t'<<vi1[6]<<'\t'<<vi1[7]<<'\t'<<vi1[8]<<'\t'<<vi1[9]<<'\t'<< std::endl;

    //test2: 
    std::cout<<"**********************test result=result2"<<std::endl;
    std::mask_array<int>    result1= vi2[mask];
    std::mask_array<int>    result2 = vi2[mask2];

    std::valarray<int>      temp1(result1);
    
    std::cout<<"temp1[0]="<<temp1[0]<<" temp1[1]="<<temp1[1]<<" temp1[2]="<<temp1[2]<<" temp1[3]="<<temp1[3]<<std::endl;
     
     result1=result2;

    std::valarray<int>      temp2(result1);
    std::cout<<"temp2[0]="<<temp2[0]<<" temp2[1]="<<temp2[1]<<" temp2[2]="<<temp2[2]<<" temp2[3]="<<temp2[3]<<std::endl;
     
     
     result1=result2;
     std::cout << "result1= result2\n" << vi2[0] <<'\t'<<vi2[1]<<'\t' <<vi2[2]<<'\t'<<vi2[3]<<'\t'<<vi2[4]<<'\t'<<vi2[5]<<'\t'<<vi2[6]<<'\t'<<vi2[7]<<'\t'<<vi2[8]<<'\t'<<vi2[9]<<'\t'<< std::endl;
     
  return 0;
}

测试上面的代码,我得到了

vi1[mask] = vi1[mask2]

0   1   2   2   3   5   4   7   5   6   

**********************test result=result2

temp1[0]=1  temp1[1]=3 temp1[2]=4 temp1[3]=6

temp2[0]=1  temp2[1]=3 temp2[2]=4 temp2[3]=6

result1= result2

0   1   2   3   4   5   6   7   8   9

据我了解,两个结果都是错误的。

orig:     0 1 2 3 4 5 6 7 8 9 
mask:       ^   ^ ^   ^   ^ ^
mask2:      ^ ^ ^ ^ ^ ^ 
vi1[mask]=vi1[mask2] or result1=result2
          0 1 2 2 2 5 2 7 5 2   

orig [3] = orig [2] /// orig [2]为2,所以orig [3]为2

orig [4] = orig [3] //从上一步开始将orig [3]设置为2,因此将orig [4]设置为2。

...

所以我的问题是:

  1. 为什么我从test1和test2得到不同的输出? test1和test2应该给出相同的结果吗?
  2. 两个输出都错了吗?如果没有,为什么?
  3. 对于test2,原始数组似乎没有更新。为什么?是错误吗?

我使用了一个相当老的编译器和llvm c ++库,尝试找出它是一个错误还是我理解/使用mask_array错误

分享您的想法。 感谢您的任何评论

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...