2016-10-27 5 views
1

Я бы хотел переписать элемент, указанный индексом, даже если этот индекс еще не существует. оператор [] работает до тех пор, пока он не окажется вне границ. emplace, похоже, делает это, но для первого параметра ему нужен итератор. Я мог бы использовать myvector.begin() + index, но это недействительно, когда вектор пуст.Как я могу переписать элемент, указанный индексом вектора?

Уточнение. Моя текущая реализация:

while (index < myvector.size()) 
    myvector.push_back(""); 

myvector[index] = val; 

Я надеялся на метод std. Массив всегда очень мал (несколько элементов).

Используя принятый ответ, мой код изменения:

if (index >= myvector.size()) // to avoid destroying the remaining elements when the index is smaller than current size 
    myvector.resize(index+1); 
myvector[index] = val; 
+2

Разъяснение необходимости. Если индекс не существует, создайте индекс? Если это так, 'vector' должен будет создать все отсутствующие элементы между последним и этим новым элементом. Вместо этого подумайте об использовании 'std :: map'. – user4581301

+2

Как вы можете переписать элемент, который не существует? AFAIK, элементы должны быть * перезаписаны *. –

+1

Теперь, когда вы отредактировали свой вопрос, ничего не имеет смысла. –

ответ

3

Для перезаписать элемент данного индекса, что индекс должен быть внутри действительные вектор оценки.

Вы можете установить размер вашего вектора на любое значение, используя vector::resize, и просто использовать operator[] с индексами в диапазоне [0, size-1]:

std::vector<std::string> data; 
... 
data.resize(100); 
// Use data[i] for i = 0,1,2,...99 
+0

да, все. – Thomas

+0

Не 'if (data.size() <100) data.resize (100)'? – ilotXXI

+0

@ilotXXI: Я не уверен, какую именно логику выполняет OP. Я написал _ «любое значение [размера]» _... Я не знаю, когда/как OP хочет изменить размер. –

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

  • Нет связанных вопросов^_^