#c #vector #stdvector #unsigned-integer #size-type
#c #вектор #stdvector #целое число без знака #тип размера
Вопрос:
Я полный новичок в программировании, и мой вопрос может быть для вас совершенно тривиальным. Я много пробовал, но просто не мог понять, почему эта программа не выдает мне ошибку. Этот код является частью одного из упражнений, которые я выполнял. Часть кода здесь заключается в присвоении переменной количества строк в векторе vec1
rows
Когда я присваиваю unsigned int
(with .size()
) 1D вектору с плавающей запятой, это должно выдавать мне ошибку, верно? Упражнение использует этот код, и он работает нормально. Мне интересно, чего мне не хватает для понимания.
// Example program
#include <iostream>
#include <vector>
int main()
{
//declaring a float 1D vector
std::vector<float> vec1(4,0);
//declaring new variable 'row' - Type float - 1D vector
std::vector<float>::size_type rows;
rows = vec1.size(); // this should give me error because i am assigning a unsigned int(with .size()) to row - 'float 1d vector'.
std::cout<<rows<<std::endl;
}
Комментарии:
1.
std::vector<float>::size_type
это не вектор, это тип, которыйstd::vector::size
возвращает
Ответ №1:
std::vector::size_type
это тип переменной, в которой хранится размер контейнера. Чего вы хотите, так это std::vector::value_type
. Даже тогда он будет компилироваться, потому что an unsigned int
может быть присвоен a float
.
Комментарии:
1. Я вижу, это имеет большой смысл. Спасибо @krisz за отличное объяснение! Итак, я где-то нашел это объяснение: «объявляйте строки как переменную типа, подходящего для хранения максимально возможного размера, который может содержать векторная система» , это правильный способ выразить это тогда?
2. Да, эта цитата описывает, что делает эта строка кода :
std::vector<float>::size_type rows;
.