C++ 动态分配的 std::vector

问题描述 投票:0回答:4

我是一名 C++ 新手,正在研究大学项目 Driver Book in C++。 我是第一次使用向量,我想让它与动态内存分配一起工作。

我有这样声明的向量:

vector <item> book;

需要什么才能使其与动态内存分配一起工作?

提前致谢。

c++ memory dynamic vector allocation
4个回答
6
投票

进一步说明:

vector<T>
是一个可调整大小的数组,它可以保存
T
类型的对象。 它在内部动态获取内存。现在,如果您想创建具有动态分配的向量,您可以随时使用
vector<item>* myVec = new vector<item>();
尽管通常您永远不需要动态创建
vector


5
投票

完成。当您

vector
进入其中时,
push_back
已经在内部动态分配。


2
投票

向量内部使用动态内存分配。所以你需要做的就是将元素放入其中:

item i = ....;
book.push_back(i);

请参阅此参考,了解可以使用矢量执行的更多操作。


0
投票

我想指出,当其他人说“当你将其推入向量时,向量已经在内部动态分配”时,这意味着推入向量的对象是动态分配的,而不是向量本身在创建时自动动态分配的。

例如,如果您希望在函数内部创建的向量持续存在,下面的代码将导致未定义的行为,因为向量本身不会自动动态分配。返回后,向量的内存位置会自动清理。该引用将引用垃圾。

#include <iostream>
#include <vector>
using namespace std;

vector<int>& f() {
  vector<int> v = vector<int>({4, 5, 6});
  
  return v;
}

int main() {
    
    vector<int>& b = f();

    
    std::cout << "Hello World!\n";
}

如果您希望在函数返回时保持向量存在,您仍然需要使用动态分配的内存。

#include <iostream>
#include <vector>
struct Node {
    int a;
    Node(int a) : a(a) {}
};
using namespace std;

vector<int>& f() {
  vector<int>& v = *new vector<int>({4, 5, 6});
  
  return v;
}

int main() {
    
    vector<int>& b = f();
    
    vector<int>* bptr = &b;
    
    cout<<b[2]<<endl;
  
    
    delete bptr;
    
    
    
    std::cout << "Hello World!\n";
}
© www.soinside.com 2019 - 2024. All rights reserved.