问题描述
#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。
...
所以我的问题是:
我使用了一个相当老的编译器和llvm c ++库,尝试找出它是一个错误还是我理解/使用mask_array错误。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)