我想创建一个具有最大元素数量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
答案 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.
那是使用部分破坏的对象。让我们摆脱麻烦!