c++ - 为什么我会得到不同的 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,0,1,1,0,1,0,1,1};
maskarray_t mask(mbuf,10);
maskarray_t::value_type mbuf2[10] = {0,1,1,1,1,1,1,0,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。
...
所以我的问题是:
- 为什么我从 test1 和 test2 得到不同的输出?test1 和 test2 应该给出相同的结果吗?
- 两个输出都错了吗?如果不是,为什么?
- 对于test2,原始数组似乎没有更新。为什么?它是一个错误吗?
我使用了一个非常旧的编译器和 llvm c++ 库,尝试找出它是否是一个错误或者我理解/使用 mask_array 错误。
请分享您的想法。感谢您的任何评论。
解决方案
推荐阅读
- javascript - 如何处理 React JS 中的 dropout
- r - 图片作为闪亮仪表板的背景
- java - Java - 发现 Raspberry Pi 主机名 - 适用于 Windows 但不适用于 Android
- php - 使用验证器验证 Laravel URL
- dart - 将小部件放置在键盘顶部 - 我目前在该小部件下方有很多空间
- exception-handling - Axon4 - 标准异常处理机制
- reactjs - ReactJS - React Router 没有改变组件但 url 正在改变
- php - 在php中获取多维子数组计数
- python - 带有销售数据的 Python 交叉表
- c - 在 C 中读取文本文件的问题