📜  在C++ STL中设置:: begin()和设置:: end()(1)

📅  最后修改于: 2023-12-03 14:51:14.927000             🧑  作者: Mango

在C++ STL中设置:: begin()和:: end()

在C++ STL中,begin()end()是迭代器中最常用的函数之一。迭代器是一种提供对序列元素的访问方式的抽象,begin()函数返回一个迭代器,其中包含序列的第一个元素的地址,而end()函数返回一个迭代器,其中包含序列的最后一个元素之后的地址。这两个函数在STL中几乎处处都会用到。

begin()end()函数用途
  • 遍历连续存储的容器,如arrayvector
  • 在循环中使用范围-based for 循环,以简化代码并避免手动迭代。
  • 接受参数列表并将其包装为STL容器的函数,使用begin()end()函数来遍历参数。
使用范例
遍历容器
#include<vector>
#include<iostream>

int main(){
    std::vector<int> vec{1,2,3,4,5,6};
    for(auto i=vec.begin();i!=vec.end();++i){
        std::cout<<*i<<' ';
    }
}

输出:1 2 3 4 5 6

范围-based for 循环
#include<vector>
#include<iostream>

int main(){
    std::vector<int> vec{1,2,3,4,5,6};
    for(auto i:vec){
        std::cout<<i<<' ';
    }
}

输出:1 2 3 4 5 6

函数中使用参数
#include<vector>
#include<iostream>

void func(std::vector<int> nums){
    for(auto i=nums.begin();i!=nums.end();++i){
        std::cout<<*i<<' ';
    }
}

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

输出:1 2 3 4 5 6

注意事项
  • 在使用end()函数时,最好不要使用算术比较操作符例如<>,因为指针算术比较未定义,可能会导致意外结果或未定义行为。
  • 在使用end()函数时,最好不要对返回的迭代器进行解引用操作,因为标记位置之后的地址其实并不存在,对其解引用会导致未定义行为。
总结

begin()end()是STL中非常重要和常用的函数,旨在提供一种可移植的方法来处理多种数据结构。它们使遍历容器变得更加方便,也是从STL容器中接收参数的常用方式之一。然而,我们在使用它们时必须小心,以确保我们不会遇到任何未定义行为。