C++ 容器中 begin()、cbegin()、rbegin()、crbegin

总结:

  • begin();end()正序迭代器
  • cbegin();cend() 返回 constbegin();end()
  • rbegin();rend() 逆序迭代器
  • crbegin();crend() 返回 constrbegin();rend()

  • 1、迭代器 begin(), cbegin()
  • 2、反向迭代器 rbegin(), rend()


1、迭代器 begin(), cbegin()

  • begin();end()分别返回指向容器头的迭代器、指向容器尾的迭代器,以std::vector为例
int main ()
{
    std::vector<int> vec{1,2,3,4,5};

    for (std::vector<int>::iterator iter=vec.begin(); iter!=vec.end(); ++iter){
        std::cout << "old element:" << *iter;				// 打印元素

        (*iter) += 1;										// 通过迭代器修改对应元素
        std::cout << ", new:" << *iter << std::endl;

    }
}

打印结果:
old element:1, new:2
old element:2, new:3
old element:3, new:4
old element:4, new:5
old element:5, new:6

  • cbegin();cend()分别返回const类型的指向容器头的迭代器、指向容器尾的迭代器。
  • std::vector为例,返回迭代器类型为std::vector::const_iterator
int main ()
{
    std::vector<int> vec{1,2,3,4,5};
    for (std::vector<int>::const_iterator iter=vec.cbegin(); iter!=vec.cend(); ++iter){
        std::cout << "element:" << *iter << std::endl;
    }
}

打印结果:
element:1
element:2
element:3
element:4
element:5


2、反向迭代器 rbegin(), rend()

  • rbegin(); rend() 返回逆序迭代器。crbegin(); crend() 返回const修饰的逆序迭代器。
std::vector<int> vec;
vec.rbegin() 	// 返回一个逆序迭代器,它指向容器vec的最后一个元素
vec.rend() 		// 返回一个逆序迭代器,它指向容器vec的第一个元素前面的位置

vec.crbegin() 	// 返回一个逆序迭代器-const,它指向容器vec的最后一个元素
vec.crend() 	// 返回一个逆序迭代器-const,它指向容器vec的第一个元素前面的位置
  • 如果容器是const的,则其返回类型要加上const_前缀,也就是const_iteratorconst_reverse_iterator类型。

C++ 容器中 begin()、cbegin()、rbegin()、crbegin_第1张图片

  • 反向迭代器是一种反向遍历容器的迭代器。通过对 ++--运算符进行重载,使得:
  • 对于反向迭代器,++ 运算将访问前一个元素,-- 运算则访问下一个元素

    例1-逆序打印:

int main() {
    std::vector<int> vec{0,1,2,3,4,5,6,7,8,9};

    vector<int>::reverse_iterator r_iter;
    for (r_iter = vec.rbegin();         // 迭代器指向最后一个元素
         r_iter != vec.rend();          // rend() 指向第一个元素的前一个
         ++r_iter)					    // ++操作访问前一个元素
        std::cout << *r_iter << " ";    // prints 9,8,7,...0
    
    std::cout << "\n";
    return 0;
}

打印结果:9 8 7 6 5 4 3 2 1 0

  • 为了以降序排列容器中元素,需向 std::sort 传递一对反向迭代器:

    例1-降序排列:

int main() {
    std::vector<int> vec{1,2,3,0,5};

    // sorts vec in "normal" order, 0 1 2 3 5 
    std::sort(vec.begin(), vec.end());
    std::cout << "正序排列: ";
    for (auto& i:vec)
        std::cout << i << " ";
    
    // sorts in reverse: puts smallest element at the end of vec, 5 3 2 1 0
    std::sort(vec.rbegin(), vec.rend());
    std::cout << "\n逆序排列: ";
    for (auto& i:vec)
        std::cout << i << " ";

    return 0;
}

正序排列: 0 1 2 3 5
逆序排列: 5 3 2 1 0

你可能感兴趣的:(C++,STL)