Я вставляю элементы с push_back в векторе. Я хочу прочитать данные в FIFO и с помощью итератора, назначенного на начало вектора. Есть ли другой способ чтения данных в FIFO в векторе?
Вы можете использовать std::deque()
И его pop_front()
метод.
Вы можете получить доступ к элементам vecotr так же, как к элементам массива:
std::vector<std::string> vec;
// Excluded: push items onto vec
for (int i = 0; i < vec.size(); ++i) {
// Example:
std::cout << vec[i];
}
Код будет:
auto value = myvector[0];
myvector.erase(myvector.begin());
Однако удаление элементов с начала (или где-то посередине) происходит медленно, потому что оно должно копировать весь массив. Доступ быстрый, хотя: vector
разрешает произвольный доступ (то есть доступ по любому явному индексу) в O (1) (то есть постоянное время доступа, то есть очень быстрое).
Но другая структура контейнера вместо vector
может иметь больше смысла для вас, например, list
или же deque
, Некоторые реализации STL (или другие фреймворки) также имеют что-то вроде rope
что во многих случаях лучшее из обоих миров.
Там нет ничего особенного, на что стоит обратить внимание. Чтобы вставить, используйте
push_back
, чтобы извлечь, вам нужно что-то вроде:
if ( !fifo.empty() ) {
ValueType results = fifo.front();
fifo.erase( fifo.begin() );
}
(Не забудьте проверить на пустое, прежде чем пытаться удалить
элемент.)
Важно помнить, что оба push_back
а также
в некоторых случаях erase
может сделать недействительными итераторы, так что вы не
хочу сохранить итераторы в базовый вектор висит
вокруг.