cbegin()
和 begin()
是 C++ STL 容器(如 vector, list, set 等)中的兩個成員函數,它們都用于獲取指向容器第一個元素的迭代器
相同點:
cbegin()
和 begin()
返回的迭代器都指向容器的末尾(end)。不同點:
常量與非常量版本:begin()
有兩個版本,分別用于常量對象(const object)和非常量對象。而 cbegin()
只有一個版本,始終返回常量迭代器(const_iterator)。
begin()
返回的是普通迭代器(iterator),可以用來修改容器內容。begin()
返回的是常量迭代器(const_iterator),不能用來修改容器內容。cbegin()
無論在常量還是非常量對象上調用,總是返回常量迭代器(const_iterator),不能用來修改容器內容。使用場景:由于 cbegin()
總是返回常量迭代器,因此它更適合在不需要修改容器內容的情況下使用。而 begin()
則適用于需要修改容器內容的情況。
示例:
#include<iostream>
#include<vector>
int main() {
std::vector<int> v = {1, 2, 3};
auto it = v.begin(); // 非常量迭代器,可以用來修改容器內容
*it = 10; // 修改第一個元素為 10
const std::vector<int>& cv = v;
auto cit = cv.begin(); // 常量迭代器,不能用來修改容器內容
// *cit = 20; // 編譯錯誤,因為不能通過常量迭代器修改容器內容
auto cit2 = cv.cbegin(); // 常量迭代器,不能用來修改容器內容
// *cit2 = 20; // 編譯錯誤,因為不能通過常量迭代器修改容器內容
return 0;
}
在這個示例中,begin()
在常量對象上調用時返回常量迭代器,而 cbegin()
總是返回常量迭代器。