【问题标题】:C++, I want to know how to allocate memory vector< pair<int, int> > *C++,我想知道如何分配内存 vector< pair<int, int> > *
【发布时间】:2019-10-15 20:21:45
【问题描述】:

我有一个错误 _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&lt; pair&lt;int, int&gt; &gt; v; 而不是指针。如果您正确使用,std::vector 将为您正确管理内存:v.push_back(make_pair(idx2, idx3));
  • 这不是向量,而是指向向量的指针
  • 为什么要尝试使用 C 风格的向量数组?不要这样做。根本不要使用 C 风格的数组。
  • 使用向量的要点是避免使用指针。只需使用向量,而不是指向向量的指针。

标签: c++ memory vector new-operator allocation


【解决方案1】:

你有一个指向不指向任何地方的向量的指针。要么为你的向量分配内存(虽然不推荐),要么不使用指针。

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));
}

【讨论】:

    【解决方案2】:

    首先,我不建议您使用指向容器的指针。

    另外,元素是指针可能会导致内存泄漏。

    但是,如果必须的话。你可以使用std::vector&lt;std::vector&lt;std::pair&lt;int, int&gt;&gt;

    或者,auto vec = std::make_shared&lt;std::vector&lt;std::vector&lt;std::pair&lt;int, int&gt;&gt;&gt;()

    使用智能指针可以自己管理内存。 std::make_shared 从 C++14 开始支持

    【讨论】:

      猜你喜欢
      • 2014-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      • 1970-01-01
      相关资源
      最近更新 更多