向量resize(), push.back(), reserve()方法
vectors resize(), push.back(), reserve() methods
我是使用矢量的新手,使用它们有点困惑。我写了一些代码,并在评论中添加了一些问题。除了我评论中的问题,为什么我们需要使用reserve()
进行分配?如果我们分配,我们会使用,不是吗?如果我们需要分配,resize()
是否比reserve()
更有用?我真的卡住了。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> a_vector( 10 );
// equal vector<int> a_vector( 10,0 ); ?
cout << "value of vector first " << a_vector.at(0) << endl; //LEGAL
// cout << a_vector.at(10); // ILLEGAL
cout << "vector size " << a_vector.size() << endl;
a_vector.push_back( 100 );
cout << "value of vector at ten " << a_vector.at(10) << endl; //LEGAL
cout << "vector size " << a_vector.size() << endl;
a_vector.pop_back();
cout << "vector size " << a_vector.size() << endl;
a_vector.resize( 12 );
// also does it mean a_vector[10] = 0; and a_vector[11] = 0;?
cout << "vector size " << a_vector.size() << endl;
cout << "value of vector at ten " << a_vector.at(10) << endl; //LEGAL
cout << "value eleventh " << a_vector.at(11) << endl; //LEGAL
a_vector.pop_back();
a_vector.pop_back();
cout << "vector size " << a_vector.size() << endl;
for (int i = 0; i < 2; i++)
{
//doesn't it same as a_vector.resize( 12 ); now ?
//so why do we need resize(); ?
//also do I need reserve() for using push_back() like this ?
a_vector.push_back(0);
}
cout << "vector size " << a_vector.size() << endl;
a_vector.pop_back();
a_vector.pop_back();
cout << "vector size " << a_vector.size() << endl;
return 0;
}
vector<int> a_vector( 10 ); // equal vector<int> a_vector( 10,0 ); ?
是的,它是隐含的vector<int> a_vector(10, int());
。
cout << "value of vector first " << a_vector.at(0) << endl; //LEGAL // cout << a_vector.at(10); // ILLEGAL
不违法,只会抛出异常。
a_vector.resize( 12 ); // also does it mean a_vector[10] = 0; and a_vector[11] = 0;?
是的。新元素是默认构造的。
for (int i = 0; i < 2; i++) { //doesn't it same as a_vector.resize( 12 ); now ? //so why do we need resize(); ? //also do I need reserve() for using push_back() like this ? a_vector.push_back(0); }
是的,在这种情况下是一样的。呼叫resize
更短。
在结论:
-
resize
删除或添加默认构造值,以使容器的大小 -
reserve
更多地与容器的容量有关,这是动态分配数组 的内部大小。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- C++从另一个类访问公共静态向量的正确方法是什么
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 没有为自己的结构调用列表推回方法
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 向量resize(), push.back(), reserve()方法
- 数据结构 - C++ unordered_map的 rehash() 和 reserve() 方法有什么区别?