在这个 例子,他们使用的是 *max_element(vector_name.begin(), vector_name.end());
而 此处他们已经使用 *max_element(vector_name, vector_name + 4);
但当我使用 *max_element(vector_name, vector_name.end());
它抛出了这个错误。
no matching function for call to ‘max_element(std::vector<int>&, std::vector<int>::iterator)’
max = *max_element(elements, elements.end());
^
现在,我明白了 vector_name
存储地址为向量,而 vector_name.begin()
返回一个迭代器,这个迭代器将向量地址作为它的值来存储,但我不明白这两者到底有什么区别?
在你的第一个例子中。vector_name
是一个 std::vector<int>
vector_name.begin()
和 vector_name.end()
返回一个 std::vector<int>::iterator
或 std::vector<int>::const_iterator
视乎 vector_name
是const-限定的。vector_name + vector_name.size()
是无效的,除非你定义了一个 operator+
对于 std::vector<int>
和 std::size_t
.在第二个例子中,他们使用 *max_element(vector_name, vector_name + 4);
, vector_name
是一个原始数组,它可以作为指向其第一个元素的指针进行衰减。而 vector_name+4
指的是第5个元素(把第一个元素算作第1个)。