Присвоение не выделенного int (with .size()) 1D вектору с плавающей запятой

#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; .