c++ cbegin與begin方法的異同點(diǎn)

c++
小樊
83
2024-08-29 15:42:08
欄目: 編程語言

cbegin()begin() 是 C++ STL 容器(如 vector, list, set 等)中的兩個(gè)成員函數(shù),它們都用于獲取指向容器第一個(gè)元素的迭代器

相同點(diǎn):

  1. 兩者都返回指向容器第一個(gè)元素的迭代器。
  2. 當(dāng)容器為空時(shí),cbegin()begin() 返回的迭代器都指向容器的末尾(end)。

不同點(diǎn):

  1. 常量與非常量版本:begin() 有兩個(gè)版本,分別用于常量對(duì)象(const object)和非常量對(duì)象。而 cbegin() 只有一個(gè)版本,始終返回常量迭代器(const_iterator)。

    • 對(duì)于非常量對(duì)象,begin() 返回的是普通迭代器(iterator),可以用來修改容器內(nèi)容。
    • 對(duì)于常量對(duì)象或者通過常量引用訪問的對(duì)象,begin() 返回的是常量迭代器(const_iterator),不能用來修改容器內(nèi)容。
    • cbegin() 無論在常量還是非常量對(duì)象上調(diào)用,總是返回常量迭代器(const_iterator),不能用來修改容器內(nèi)容。
  2. 使用場(chǎng)景:由于 cbegin() 總是返回常量迭代器,因此它更適合在不需要修改容器內(nèi)容的情況下使用。而 begin() 則適用于需要修改容器內(nèi)容的情況。

示例:

#include<iostream>
#include<vector>

int main() {
    std::vector<int> v = {1, 2, 3};
    auto it = v.begin(); // 非常量迭代器,可以用來修改容器內(nèi)容
    *it = 10; // 修改第一個(gè)元素為 10

    const std::vector<int>& cv = v;
    auto cit = cv.begin(); // 常量迭代器,不能用來修改容器內(nèi)容
    // *cit = 20; // 編譯錯(cuò)誤,因?yàn)椴荒芡ㄟ^常量迭代器修改容器內(nèi)容

    auto cit2 = cv.cbegin(); // 常量迭代器,不能用來修改容器內(nèi)容
    // *cit2 = 20; // 編譯錯(cuò)誤,因?yàn)椴荒芡ㄟ^常量迭代器修改容器內(nèi)容

    return 0;
}

在這個(gè)示例中,begin() 在常量對(duì)象上調(diào)用時(shí)返回常量迭代器,而 cbegin() 總是返回常量迭代器。

0