std::valarray::operator[]
STD::valArray::Operator。[]
| (1) | |
---|---|---|
T operator const; | (until C++11) | |
const T& operator const; | (since C++11) | |
T& operator; | (2) | |
std::valarray<T> operator const; | (3) | |
std::slice_array<T> operator; | (4) | |
std::valarray<T> operator const; | (5) | |
std::gslice_array<T> operator; | (6) | |
std::valarray<T> operator const; | (7) | |
std::mask_array<T> operator; | (8) | |
std::valarray<T> operator const; | (9) | |
std::indirect_array<T> operator; | (10) | |
检索数组的单个元素或部分。
大const
返回元素序列的重载会创建一个新的std::valarray
对象。非-const
重载包含对数组元素的引用的返回类。
参数
返回值
1,2%29A对相应元素的引用
3,5,7,9%29 Astd::valarray
对象,该对象包含选定项的副本。
4,6,8,10%29相应的数据结构包含对选定项目的引用
例外
%280%29
前提条件
所选元素必须存在。
注记
- 的适当值
i
和j
,下列属性为真:1%29(a[i] = q, a[i]) == q
对一个非康涅斯特人来说a
...2%29&a[i+j] == &a[i] + j
这意味着va
lArra
y元素在内存中是相邻的。3%29&a[i] != &b[j]
这适用于每一个对象。a
和b
它们不是彼此的别名。这意味着元素中没有别名,并且可以使用该属性来执行某些类型的优化。
- 引用在调整尺寸或者当数组被破坏时。
对于重载%283、5、7、9%29,可以使用不同于std::valarray
在这种情况下,替换类型具有以下属性:
- 全
const
成员职能std::valarray
提供。
std::valarray
,,,std::slice_array
,,,std::gslice_array
,,,std::mask_array
和std::indirect_array
可以从替换类型构造。
- 所有接受类型参数的函数
const
std::valarray
&
除begin()
和end()
%28,因为C++14%29也应该接受替换类型。
- 接受两个类型参数的所有函数
const
std::valarray
&
应该接受每一个组合const
std::valarray
&
以及替代型。
- 返回类型不会在最嵌套的参数类型上添加两个以上的模板嵌套级别。
注记
切片/掩码/间接索引访问不连锁:v[v==n][
std::slice
(0,5,2]
= x;
是一个错误,因为std::mask_array
28%v[v==n]
%29没有operator[]
...
例
二次
#include <iostream>
#include <valarray>
int main()
{
std::valarray<int> data = {0,1,2,3,4,5,6,7,8,9};
std::cout << "Initial valarray: ";
for(int n: data) std::cout << n << ' ';
std::cout << '\n';
data[data > 5] = -1; // valarray<bool> overload of operator[]
// the type of data>5 is std::valarray<bool>
// the type of data[data>5] is std::mask_array<int>
std::cout << "After v[v>5]=-1: ";
for(std::size_t n = 0; n < data.size( ++n)
std::cout << data[n] << ' '; // regular operator[]
std::cout << '\n';
}
二次
产出:
二次
Initial valarray: 0 1 2 3 4 5 6 7 8 9
After v[v>5]=-1: 0 1 2 3 4 5 -1 -1 -1 -1
二次
© cppreference.com
在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。