【发布时间】:2014-09-24 07:14:58
【问题描述】:
这是我几天前发布的https://softwareengineering.stackexchange.com/questions/256241/c-coding-practice-class-vs-free-functions 问题的后续。简而言之,这个想法是为统计数据分析创建一个自定义向量类。
我得到了很好的回应,这让我意识到我需要理解:为什么在容器类的构造函数中使用 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 是一个(无符号整数)数据类型,应该用来表示它的值应该代表 n 个对象的大小。
为了理解 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++ 编程的新手,更糟糕的是,这是我的第一个模板类。
感谢您的时间和耐心,我真的很感激。
【问题讨论】:
标签: c++ data-structures class-design