#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, особенно если вы не хотите ни вводить в него что-либо, ни инициализировать его с некоторым размером, отличным от 03.
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();
}
Опять же, это глупый код. Не используйте в реальной жизни. Тем не менее, это то, что вы хотите.