C ++ вектор вставки и чтения

Я вставляю элементы с push_back в векторе. Я хочу прочитать данные в FIFO и с помощью итератора, назначенного на начало вектора. Есть ли другой способ чтения данных в FIFO в векторе?

0

Решение

Вы можете использовать std::deque() И его pop_front() метод.

5

Другие решения

Вы можете получить доступ к элементам vecotr так же, как к элементам массива:

std::vector<std::string> vec;
// Excluded: push items onto vec
for (int i = 0; i < vec.size(); ++i) {
// Example:
std::cout << vec[i];
}
0

Код будет:

auto value = myvector[0];
myvector.erase(myvector.begin());

Однако удаление элементов с начала (или где-то посередине) происходит медленно, потому что оно должно копировать весь массив. Доступ быстрый, хотя: vector разрешает произвольный доступ (то есть доступ по любому явному индексу) в O (1) (то есть постоянное время доступа, то есть очень быстрое).

Но другая структура контейнера вместо vector может иметь больше смысла для вас, например, list или же deque, Некоторые реализации STL (или другие фреймворки) также имеют что-то вроде rope что во многих случаях лучшее из обоих миров.

0

Там нет ничего особенного, на что стоит обратить внимание. Чтобы вставить, используйте
push_back, чтобы извлечь, вам нужно что-то вроде:

if ( !fifo.empty() ) {
ValueType results = fifo.front();
fifo.erase( fifo.begin() );
}

(Не забудьте проверить на пустое, прежде чем пытаться удалить
элемент.)

Важно помнить, что оба push_back а также
в некоторых случаях erase может сделать недействительными итераторы, так что вы не
хочу сохранить итераторы в базовый вектор висит
вокруг.

0
По вопросам рекламы [email protected]