Недопустимый размер вектора C

#c #vector

#c #вектор

Вопрос:

Приведен следующий код:

 #include <vector>
std::vector<int> intVec;
intVec.reserve(5);
intVec[0] = 1;
std::cout << "intVec Size: " << intVec.size();
  

Почему intVec.size() возвращает недопустимый размер 0? Как я могу исправить эту проблему? Я не хочу использовать push_back вместо этого, а также не хочу инициализировать вектор с помощью 5 элементов.

Редактировать: размер вектора должен быть равен 1 после intVec[0] = 1 .

Комментарии:

1. резерв изменяет емкость, а не размер. Вы intVec похожи на пустой бак..

2. почему вы называете 0 «недопустимым». Для вектора вполне допустимо иметь размер 0, особенно если вы не хотите ни вводить в него что-либо, ни инициализировать его с некоторым размером, отличным от 0

3. reserve не изменяет размер. Я не хочу вместо этого использовать push_back, а также не хочу инициализировать вектор с помощью 5 элементов. Чего вы хотите?

4. Ироничный ответ: если вы не хотите использовать intVec.push_back(x) , используйте intVec.insert(intVec.end(), x) вместо этого. Более серьезно: вам нужно либо предварительно инициализировать вектор до определенного размера, либо добавить к нему элементы, если вы хотите, чтобы он не был пустым.

5. После редактирования: это невозможно. std::vector::operator[] можно получить доступ только к существующим элементам, он никогда не изменяет размер вектора.

Ответ №1:

Из вашего непонятного вопроса я могу предположить, что вы хотите, чтобы вектор обрабатывал [] operator как «редактировать, если он существует, или создавать, если это не так». Например, что-то вроде поведения [] operator in std::map ..

Вы просто не можете. Он не был разработан таким образом.

Кстати, вы можете сделать что-то вроде этого: (Это плохая идея. Не делайте этого.)

 intamp; funky_operator(std::vector<int>amp; vec, const std::size_t index){
    if(index<vec.size()){
        vec.resize(index 1);
    }
    return vec[index];
}
int main(){
    std::vector<int> intVec;
    intVec.reserve(5);
    funky_operator(intVec,0) = 1;
    std::cout << "intVec Size: " << intVec.size();
}
  

Опять же, это глупый код. Не используйте в реальной жизни. Тем не менее, это то, что вы хотите.