cbegin()
和 begin()
是 C++ STL 容器(如 vector, list, set 等)中的兩個(gè)成員函數(shù),它們都用于獲取指向容器第一個(gè)元素的迭代器
相同點(diǎn):
cbegin()
和 begin()
返回的迭代器都指向容器的末尾(end)。不同點(diǎn):
常量與非常量版本:begin()
有兩個(gè)版本,分別用于常量對(duì)象(const object)和非常量對(duì)象。而 cbegin()
只有一個(gè)版本,始終返回常量迭代器(const_iterator)。
begin()
返回的是普通迭代器(iterator),可以用來修改容器內(nèi)容。begin()
返回的是常量迭代器(const_iterator),不能用來修改容器內(nèi)容。cbegin()
無論在常量還是非常量對(duì)象上調(diào)用,總是返回常量迭代器(const_iterator),不能用來修改容器內(nèi)容。使用場(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()
總是返回常量迭代器。