C++,我想知道如何分配内存 vector< pair<int, int> > *
C++, I want to know how to allocate memory vector< pair<int, int> > *
我有一个错误 _Has_unused_capacity() 向量...
我不知道如何分配动态内存
我尝试push_back,但出现错误
vector< pair<int, int> > * v;
void Some_Function(){
int m=3;
int idx1=1;
int idx2=2;
int idx3=3;
for(int i = 0; i<m; i++) {
v[idx1].push_back(make_pair(idx2, idx3));
v[idx2].push_back(make_pair(idx1, idx3));
}
}
你有一个指向无处可去的向量的指针。为你的向量分配内存(虽然不推荐)或者不使用指针。
vector< pair<int, int> > * v = new vector<pair<int, int>>[2];
V[idx].push_back(make_pair(idx2, idx3));
完成后不要忘记删除矢量。
delete [] v;
更好的方法是使用智能指针,这里有一个 shared_ptr
:
的例子
#include <iostream>
#include <vector>
#include <memory>
using namespace std;
using vecPair = vector<pair<int, int>>;
// deallocator for an array of vectors
void deleter(vecPair* x)
{
delete[] x;
}
int main() {
shared_ptr<vecPair> v;
v.reset(new vecPair[2], deleter);
int a = 1;
int b = 2;
int c = 3;
int d = 4;
v.get()[0].push_back(make_pair(a, b));
v.get()[1].push_back(make_pair(c, d));
}
首先,我不建议你使用指向容器的指针。
另外,元素是指针可能会导致内存泄漏。
但是,如果必须的话。你可以使用 std::vector<std::vector<std::pair<int, int>>
或者,auto vec = std::make_shared<std::vector<std::vector<std::pair<int, int>>>()
使用智能指针可以自行管理内存。 std::make_shared
自 C++14
以来一直支持
我有一个错误 _Has_unused_capacity() 向量... 我不知道如何分配动态内存
我尝试push_back,但出现错误
vector< pair<int, int> > * v;
void Some_Function(){
int m=3;
int idx1=1;
int idx2=2;
int idx3=3;
for(int i = 0; i<m; i++) {
v[idx1].push_back(make_pair(idx2, idx3));
v[idx2].push_back(make_pair(idx1, idx3));
}
}
你有一个指向无处可去的向量的指针。为你的向量分配内存(虽然不推荐)或者不使用指针。
vector< pair<int, int> > * v = new vector<pair<int, int>>[2];
V[idx].push_back(make_pair(idx2, idx3));
完成后不要忘记删除矢量。
delete [] v;
更好的方法是使用智能指针,这里有一个 shared_ptr
:
#include <iostream>
#include <vector>
#include <memory>
using namespace std;
using vecPair = vector<pair<int, int>>;
// deallocator for an array of vectors
void deleter(vecPair* x)
{
delete[] x;
}
int main() {
shared_ptr<vecPair> v;
v.reset(new vecPair[2], deleter);
int a = 1;
int b = 2;
int c = 3;
int d = 4;
v.get()[0].push_back(make_pair(a, b));
v.get()[1].push_back(make_pair(c, d));
}
首先,我不建议你使用指向容器的指针。
另外,元素是指针可能会导致内存泄漏。
但是,如果必须的话。你可以使用 std::vector<std::vector<std::pair<int, int>>
或者,auto vec = std::make_shared<std::vector<std::vector<std::pair<int, int>>>()
使用智能指针可以自行管理内存。 std::make_shared
自 C++14