void operator>>=(const ValOrProxy<T>& xs) const;
概要
右シフトの複合代入を行う。
効果
元となる valarray
オブジェクトから参照によって抽出した各要素を、xs
の各要素の値だけ左シフトする。
戻り値
なし
備考
- 引数の型
ValOrProxy
は、valarray
、あるいは、その代理となる型である。
<valarray>
の概要も参照のこと。 valarray
から抽出した要素数とxs
の要素数が異なる場合、その挙動は未定義。
例
#include <iostream>
#include <valarray>
#include <bitset>
#include <numeric>
#include <functional>
std::size_t product(const std::valarray<std::size_t>& va)
{
return std::accumulate(
std::begin(va),
std::end(va),
1u,
std::multiplies<std::size_t>());
}
int main()
{
std::valarray<int> va = {
0b01010001,
0b10100000,
0b01011000
};
const std::size_t start = 0u; // 開始位置
const std::valarray<std::size_t> lengths = {3u}; // 要素数
const std::valarray<std::size_t> strides = {1u}; // 何個置きに処理するか
// 抽出した要素を4ビット右シフトする
// lengthを掛け合わせたものがgsliceで抽出した配列の長さ
va[std::gslice(start, lengths, strides)] >>= std::valarray<int>(4, product(lengths));
for (int x : va) {
std::cout << std::bitset<8>(x).to_string() << std::endl;
}
}
出力
00000101
00001010
00000101