2016-06-01 8 views
1

Я не владею C++. У меня очень короткий скрипт C++, который я пытаюсь преобразовать в PHP, который имеет дело с векторами.Векторная манипуляция

Из онлайн-документации Я собираю, что векторы - это списки вещей, несколько напоминающие массивы на PHP, но с меньшими возможностями. Тем не менее, я изо всех сил пытаюсь найти хорошую документацию по манипулированию векторами.

Например

real32 test(std::vector<T>::iterator First, std::vector<T>::iterator Last) 
{ 
    if(Last - First > 0) { 
     // do stuff 
    } 
} 

В этом фрагменте я догадку в ряде результатов, чтобы сделать с Last - First.

  • Разница в количестве элементов между каждым вектором
  • Разница в сумме элементов между каждым вектором
  • Различие между отдельными элементами в каждом векторе (угадывание из iterator - но это может быть для цикла в //do stuff part)

Я пытаюсь RTFM но some из-лайн resources я наткнулся не попадались как особо проницательные (хотя Mayb e Я не могу спросить/найти правильный вопрос)

Что такое Last - First Фактически это в данном случае?

+1

Обратите внимание, что два итератора могут принадлежать двум различным векторам! – Ajay

+0

@Ajay Если они это сделают, то эта функция будет демонстрировать неопределенное поведение. – Galik

+0

@Galik, True. Но такая функция связана с повышением ошибки во время выполнения. Попробуйте передать разные итераторы в 'vector' и увидите, что он хорошо его обрабатывает (ну, по крайней мере, в VC++) – Ajay

ответ

6

Функция не принимает 2 vector с, но 2 iterators, что точка, в определенном месте внутри vector. В этом случае - первый и один последний. Это нормальная идиома C++. (Обратите внимание, что итераторы могут фактически указывать некоторую часть существующего vector, на самом деле это не должно быть вообще).

Поэтому разница заключается в общем количестве элементов в vector. Обычно каждый цикл обрабатывал бы каждый элемент и увеличивал бы First до тех пор, пока он не достигнет Last.

1|2|3|4|5| 
^First ^Last 

Обратите внимание, что Last не указывает на 5, но один мимо него. Last не является допустимым элементом vector, но является дозорным, указывая, когда прекратить цикл.

В данном случае , так как вам нужно было бы прирастить First 5 раз, чтобы нажать Last.

Справочная документация, как правило, не является лучшим местом для изучения языка. У нас есть book list.

Ваши ссылки:

  • isocpp.org: О процессе стандартизации и комитет, не много фактического языка документации здесь.

  • cplusplus.com: неофициальный сайт справочной документации. В прошлом было не очень хорошо разбираться в ошибках.Так много людей предпочитают:

  • cppreference.com: поддерживаемая сообществом wiki справочной документации.

Там нет «официальной» справочной документации, кроме Стандарта, проект которого можно найти на isocpp.org, но на самом деле, не пытаются прочитать, что это специалисты только, нацеленный у компиляторов. Я даже не собираюсь ссылаться на него.

Если честно, я изо всех сил стараюсь найти действительно хороший учебник для начинающих в Интернете.

+1

Строго говоря, мы не знаем, что эти два итератора указывают на первый и последний элементы вектора, только они указывают на начальную и конечную часть вектора. Их различие - это количество элементов, лежащих между этими двумя точками. – Galik

Смежные вопросы