这看起来很简单,但我很困惑:我创建一个百矢量的方式,比方说,int
s
std::vector<int> *pVect = new std::vector<int>(100);
Run Code Online (Sandbox Code Playgroud)
但是,看看std :: vector的文档,我发现它的构造函数是形式的
explicit vector ( size_type n, const T& value= T(), const Allocator& = Allocator() );
Run Code Online (Sandbox Code Playgroud)
那么,前一个如何运作?是否new
使用从默认构造函数获取的初始化值调用构造函数?如果是这样的话,会的
std::vector<int, my_allocator> *pVect = new std::vector<int>(100, my_allocator);
Run Code Online (Sandbox Code Playgroud)
我通过自己的分配器,也工作?
Joh*_*itb 14
你做错了.如果您需要的只是当前范围和时间的向量,只需将其创建为自动对象即可
std::vector<int> pVect(100);
Run Code Online (Sandbox Code Playgroud)
构造函数具有第二个和第三个参数的默认参数.所以只用int就可以调用它.如果你想传递一个自己的分配器,你必须传递第二个参数,因为你不能只是跳过它
std::vector<int, myalloc> pVect(100, 0, myalloc(some_params));
Run Code Online (Sandbox Code Playgroud)
一个专门的例子可能会澄清这个问题
void f(int age, int height = 180, int weight = 85);
int main() {
f(25); // age = 25, height and weight taken from defaults.
f(25, 90); // age=25, height = 90 (oops!). Won't pass a weight!
f(25, 180, 90); // the desired call.
}
Run Code Online (Sandbox Code Playgroud)
小智 5
(或许)澄清:
要创建名为v of 100 elements的矢量对象:
std::vector <int> v( 100 );
Run Code Online (Sandbox Code Playgroud)
这使用了将size(100)作为第一个参数的向量构造函数.要创建100个元素的动态分配向量:
std::vector <int> * p = new std::vector<int>( 100 );
Run Code Online (Sandbox Code Playgroud)
它使用完全相同的构造函数.