2013-10-12 6 views
0

Я установил свой векторный размер равным 2 и попытался повторно заполнить входные значения после того, как он достигнет 2. но я не знаю, как это сделать.Как заполнить значение в векторе

например

выход

a 
b 

после того, как ввести с ней будет выводить

c 
b 

и после того, как тип D он будет выводить

c 
d 

-

storeInfo.resize(2);//set the size 
storeInfo.push_back(something);//put the value inside vector 
//how to repopulate with values within the range after it reaches more than 2? 

for(int i = 0; i< storeInfo.size(); i++) { 
    cout << storeInfo[i]; 
} 
+3

Почему вы не используете Deque? http://www.cplusplus.com/reference/deque/deque/ – Pacane

ответ

1
storeInfo.resize(2); 
int curIdx = 0; 

while(1) { 
    ... <set val somehow> ... 
    storeInfo[curIdx] = val; 
    curIdx = (curIdx + 1) % 2; 
} 
0

То, что вы, кажется, ищет является FIFO (первым вошел, первым вышел) структурой. std::deque подходит для этой формы (вроде), но для выполнения именно того, что вы хотите, потребуется некоторая специальная обработка.

Если вы хотите использовать Boost, у него есть circular buffer template.

В качестве альтернативы, вы можете также использовать std::array, если вы знаете размер во время компиляции (опять же, это потребовало бы некоторые пользовательские обработки, чтобы действовать как кольца/кольцевой буфер

+0

Хорошо спасибо за информацию – user3429531

+0

с дека, он просто поп каждый раз он хочет нажимать – Pacane

+1

@Pacane. Это означало бы, что он должен был либо удостовериться, что он делает поп каждый раз (бедный дизайн) или обернуть его в пользовательский класс, чтобы сделать это (лучше), но в любом случае это обычная обработка. Если он знает размер буфера во время компиляции, 'std :: array' будет более эффективным с точки зрения использования памяти. Но если он хочет использовать библиотеки Boost, круговой буферный шаблон делает именно то, что он хочет, с интерфейсом, который очень похож на 'std :: vector'. –

0

вы можете изменить свой код, чтобы они:.

storeInfo.insert(storeInfo.begin(), something); 
storeInfo.resize(2); 


for(int i = 0; i< 2; i++) { 
     cout << storeInfo[i]; 
} 
+0

Ему нужно либо изменить размер после каждой вставки (плохой выбор дизайна), либо создать обертку, которая делает это после каждой вставки (лучше, но есть еще лучшие подходы). –

+0

спасибо большое. что помогает – user3429531

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