2

具体的には、ベクトル項目のそれぞれがサイズを変更する可能性がある場合、STL は vector< vector< T > > 内のベクトル項目をどのように整列させるのでしょうか? 外側のベクトルは参照を整列し、項目を別の場所に保持しますか?

4

3 に答える 3

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 に答える