向量。如何设置元素的最大数量并查找当前计数?

时间:2012-02-12 12:24:14

标签: c++

我想创建一个具有最大元素数量48的向量,我想随时知道向量中当前元素的数量。

我使用此代码:

·H

std::vector< CPPobject* >vec; 

.mm

int maxCountElementInVec = 48; 
vec.resize( maxCountElementInVec );
int countElement  = sizeof( vec ) / sizeof( vec[0] );

printf("%d ",countElement); // return 3

&LT; ...&GT;

vec.push_back( some_cpp_obj );
int countElement  = sizeof( vec ) / sizeof( vec[0] );
if( countElement > maxCountElementInVec ) printf("Evrika"); 
printf("%d ",countElement); // return 3

CountElement总是3

5 个答案:

答案 0 :(得分:5)

您无法设置最大元素数。

然而,使用

检索长度
int length = myVector.size();

答案 1 :(得分:3)

使用.size()方法可以找到元素的数量。

要设置限制,您可以在std::vector上创建一个包装器:

template<typename T>
class MyVector : public std::vector<T>
{
    int _maxSize;
public:
    void setMaxSize(int maxSize) {_maxSize = maxSize;}
    void push_back(const T& element)
    {
        if (std::vector<T>::size() < _maxSize)
           std::vector<T>::push_back(element);
        else
        {
           //disallow - throw exception or whatever
        }
    }
};

答案 2 :(得分:1)

获取向量中的元素数量非常简单。只需致电vec.size()即可。您不能限制向量不要在保留大小上调整大小。

您查询的是矢量结构的大小超过简单指针的大小。矢量的元素不是这个大小的一部分 - 因此你可以获得恒定的大小。

答案 3 :(得分:1)

我不认为STL向量上的sizeof在这里做了一些非常有用的事情。正如Kerrek在评论中指出的那样,它不会评估与向量中元素数量成比例的东西。只需使用size()来获取向量中保存的当前元素数。

您可以切换到EASTL,它提供fixed_vector,它就像一个向量,除了所有内存都是预先分配的,所以它不能增长到超过你指定的数量。它仍然保持size()跟踪已插入的元素数量。

答案 4 :(得分:1)

包装不好。这打开了内存泄漏的大门,因为std :: vector没有虚拟析构函数。

让泄漏一些记忆:

// Construct std::vector & MyVector
std::vector * v = dynamic_cast<std::vector *>( new MyVector() ); 
// Destruct only std::vector
delete v;

MyVector的构造没有调用它的析构函数。

放手吧:

MyVector * mv = new MyVector(); // Construct std::vector & MyVector

std::vector * v = dynamic_cast<std::vector *>( mv );
delete v; // Destruct only std::vector

mv.resize(74); // Usage of a partially destroy object.

那是使用部分破坏的对象。让我们摆脱麻烦!