В чем разница между vector_name, vector_name.begin () и (vector_name + vector_name.size ()), vector_name.end ()? - PullRequest
0 голосов
/ 09 мая 2020

В этом примере они используют *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() возвращает итератор, который сохраняет адрес вектора в качестве своего значения, но я не понимаю, в чем именно разница?

1 Ответ

1 голос
/ 09 мая 2020

В вашем первом примере 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-м).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...