vector_name、vector_name.begin()和(vector_name+vector_name.size())、vector_name.end()之间有什么区别?

问题描述 投票:0回答:1

在这个 例子,他们使用的是 *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() 返回一个迭代器,这个迭代器将向量地址作为它的值来存储,但我不明白这两者到底有什么区别?

c++ vector stl
1个回答
1
投票

在你的第一个例子中。vector_name 是一个 std::vector<int>

  • vector_name.begin()vector_name.end() 返回一个 std::vector<int>::iteratorstd::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个)。

© www.soinside.com 2019 - 2024. All rights reserved.