std:: begin (std::valarray)
| 
           
            
             template
            
            
             <
            
            
             class
            
            T
            
             >
            
             /* 见下文 */ begin ( valarray < T > & v ) ; | (1) | (C++11 起) | 
| 
           
            
             template
            
            
             <
            
            
             class
            
            T
            
             >
            
             /* 见下文 */ begin ( const valarray < T > & v ) ; | (2) | (C++11 起) | 
       针对
       
        valarray
       
       的
       
        
         std::begin
        
       
       重载版本返回一个未指定类型的迭代器,该迭代器指向数值数组中的首个元素。
      
- 满足 mutable LegacyRandomAccessIterator 的要求,
| 
 | (自 C++20 起) | 
- 
         具有成员类型
         value_type,其类型为T,且
- 
         具有成员类型
         reference,其类型为T&。
- 满足 常量 LegacyRandomAccessIterator 的要求,
| 
 | (C++20 起) | 
- 
         具有成员类型
         value_type,其类型为T,且
- 
         具有成员类型
         reference,其类型为const T&。
       从此函数返回的迭代器将在以下两种情况中首先发生时失效:对
       
        
         v
        
       
       调用成员函数
       
        
         resize()
        
       
       ,或
       
        
         v
        
       
       的生命周期结束。
      
| 目录 | 
参数
| v | - | 数值数组 | 
返回值
指向数值数组中第一个值的迭代器。
异常
可能抛出实现定义的异常。
注释
       与其他接受
       
        std::valarray
       
       参数的函数不同,
       
        begin()
       
       无法接受由 valarray 相关表达式可能返回的替换类型(例如表达式模板生成的类型):
       
        
         
          
           std::
           
            begin
           
          
         
         
          (
         
         v1
         
          +
         
         v2
         
          )
         
        
       
       不具备可移植性,必须改用
       
        
         
          
           std::
           
            begin
           
          
         
         
          (
         
         
          
           std::
           
            valarray
           
          
         
         
          <
         
         T
         
          >
         
         
          (
         
         v1
         
          +
         
         v2
         
          )
         
         
          )
         
        
       
       。
      
此函数的意图是让 范围for循环 能够处理valarray,而非提供容器语义。
示例
#include <algorithm> #include <iostream> #include <valarray> void show(const std::valarray<int>& v) { std::for_each(std::begin(v), std::end(v), [](int c) { std::cout << c << ' '; }); std::cout << '\n'; }; int main() { const std::valarray<int> x{47, 70, 37, 52, 90, 23, 17, 33, 22, 16, 21, 4}; const std::valarray<int> y{25, 31, 71, 56, 21, 21, 15, 34, 21, 27, 12, 6}; show(x); show(y); const std::valarray<int> z{x + y}; for (char c : z) std::cout << c; }
输出:
47 70 37 52 90 23 17 33 22 16 21 4 25 31 71 56 21 21 15 34 21 27 12 6 Hello, C++!
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| DR | 适用范围 | 发布时的行为 | 正确行为 | 
|---|---|---|---|
| LWG 2058 | C++11 | 1. 
          begin()
         被要求支持替换类型2. 未规定返回的迭代器何时失效 | 1. 不再要求 2. 已明确规定 | 
参见
| 
           
            
             
              (C++11)
             
            
           
           | 特化
         
          
           std::end (函数模板) |