具体来说,考虑到每个向量项都可能改变大小,STL 如何对齐 vector<vector< T > > 中的向量项?外部向量是否对齐引用并将项目保留在其他地方?
问问题
99 次
3 回答
6
Astd::vector
持有指向数组第一个元素的指针。当元素数量发生变化并且数组需要增长或缩小时,分配一个新数组并复制数据。矢量对象本身的实际大小永远不会改变。
于 2013-08-02T20:59:59.703 回答
1
向量通常不会“改变大小”。通常,向量的存储是使用指向T
成员变量的指针来实现的。(并且只有该指针指向的内存在调整大小时重新分配,自然不会改变向量实例本身的大小。)
于 2013-08-02T21:00:18.047 回答
0
标准向量基本上是围绕这个的包装器
template<typename T>
class vector
{
T* m_data;
size_t m_count;
size_t m_capacity;
//...
void push_back(const T& src) {
if (m_capacity < m_count + 1) {
size_t newCapacity = m_capacity + growthRate();
T* newData = ::realloc(m_data, newCapacity);
// ...
m_data = newData;
m_capacity = newCapacity;
}
// copy into the slot at m_count
m_data[m_count] = src;
++m_count;
}
};
因此,给定的向量实例总是存储相同大小的元素。它可以包含多态或可变项的唯一方法是通过指针,例如
class Base {};
class D1 : public Base {};
class D2 : public Base { int i; };
std::vector<std::unique_ptr<Base>> vec;
vec.emplace_back(new Base);
vec.emplace_back(new D1);
vec.emplace_back(new D2);
于 2013-08-02T21:20:22.330 回答