это вопрос до этого вопроса https://softwareengineering.stackexchange.com/questions/256241/c-coding-practice-class-vs-free-functions, который я опубликовал несколько дней назад. Короче говоря, идея заключается в создании пользовательского векторного класса для анализа статистических данных.C++ понимание size_t поведение для создания вектора
Я получил отличный ответ, который заставило меня понять, что мне нужно понять: зачем использовать size_t в конструкторе класса контейнера и зачем его использовать?
Вот часть предлагаемого решения:
template<class T>
class vect
{
std::vector<T> m;
public:
vect(size_t n) :m(n) {}
void addTo(T a){ m.push_back(a); }
std::vector<T> get() const { return m;}
... more functions and overloaded operators
};
Я понимаю, что size_t является (беззнаковое целое) тип данных и следует использовать для указания, что это значение должно представлять размер п объекта.
Для того, чтобы понять поведение size_t я сделал следующее:
int main() {
vect<int> m(0);
vect<int> n(100);
std::cout << sizeof(n) << std::endl;
std::cout << sizeof(m) << std::endl;
std::cout << sizeof(m.get()) << std::endl;
for (int i = 0 ; i < 100; i++) {
m.addTo(i);
}
std::cout << sizeof(m) << std::endl;
std::cout << sizeof(m.get()) << std::endl;
}
все которые возвращают «24». (Я ожидал, что изменение размера объекта после добавления параметров к нему.) Однако:
for(int i = 0; i<100;i++)
std::cout << m[i] << std::endl;
хорошо печатает все значения от 0 до 100. Таким образом, я знаю, что есть 100 целых чисел уставились в векторе, но тогда почему его размер 24, а не 100?
Очевидно, что я новичок в программировании на C++ и ухудшаю ситуацию, это мой первый класс шаблонов.
Благодарим вас за ваше время и терпение, я очень ценю это.
Спасибо, мистер Фот. Если я могу отслеживать: так в чем преимущество включения size_t в конструктор, когда размер контейнера, который наследует его значение, предопределен? (vect (size_t n): m (n) {}) – Vincent
"size_t - это тип, возвращаемый оператором sizeof и широко используемый в стандартной библиотеке для представления размеров * и count *." В конструкторе аргумент 'size_t' используется как * число * элементов, а не как размер чего-либо в байтах. –
спасибо. Я знаю, что мои вопросы кажутся довольно смущающими, но я действительно пытался понять, что там происходит. Поэтому снова я очень ценю ваши ответы. – Vincent