У меня есть вектор ошибки _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));
}
}
Это не вектор, а указатель на вектор
Почему вы пытаетесь использовать массив векторов в стиле C? Не делай этого. Не используйте массивы в стиле C вообще.
Смысл использования вектора в том, чтобы избегать использовать указатели. Просто используйте вектор, а не указатель на вектор.
У вас есть указатель на вектор, который указывает в никуда. Либо выделите память для вашего вектора (не рекомендуется), либо не используйте указатель.
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
Просто используйте
vector< pair<int, int> > v;
вместо указателя.std::vector
будет правильно управлять памятью для вас, если вы используете ее правильно:v.push_back(make_pair(idx2, idx3));