У меня есть карта, которая хранит компоненты многочлена. Ключ является показателем, а значение - коэффициентом. Карта с целыми ключами и целыми значениями. Я повторяюсь в своей функции печати, программа вылетает, когда я выполняю свою итерацию. Когда я вводил ключи в свои массивы, все, казалось, проверялось. Входной файл имеет следующий формат -1 0 5 1 20 3 2 -9 -2 1 1 2 3 1 -2 9, где каждая пара (коэффициент, показатель степени) .`Итерация через карту C++
//header
#ifndef poly_h
#define poly_h
#include <map>
class poly {
private:
std::map<int, int>* pol;
public:
poly(char* filename);
poly& operator+(poly& rhs);
poly& operator-(poly& rhs);
poly& operator*(poly& rhs);
void print();
~poly();
};
#endif
//cpp file
#include "poly.h"
#include <iostream>
#include <fstream>
using namespace std;
poly::poly(char* filename)
{
map<int, int>* pol = new map<int, int>;
ifstream input_file;
input_file.open("input.txt");
int coe;
int exp;
while (input_file >> coe) {
input_file >> exp;
cout << coe << " ^" << exp << " ";
map<int, int>::iterator it = pol->find(exp);
if (it == pol->end()) {
(*pol)[exp] = coe;
}
else {
(*pol)[exp] += coe;
if ((*pol)[exp] == 0) {
pol->erase(it);
}
}
cout << (*pol)[exp];
//print();
cout << endl;
}
input_file.close();
}
void poly::print()
{
cout << "inside print<<endl;
for (map<int, int>::iterator outer_iter = pol->begin(); outer_iter != pol->end(); ++outer_iter);
cout << "done";
}
poly::~poly()
{
delete pol;
}
'std :: map * pol;' - не нужно, чтобы это было указателем, а затем использовалось 'new' и' delete'. Все, что вам нужно, это 'std :: map pol;'. Кроме того, вы можете очистить форматирование? Это повсюду, что затрудняет чтение вашего кода. –
PaulMcKenzie
Также, пожалуйста, напишите [mcve], что означает функцию 'main'. Причина в том, что я могу легко сломать вашу программу (все из-за указателя, о котором я упоминал), с простой 2 или 3-строчной программой. Кроме того, оператор +, - и * должен возвращать новый объект 'poly', а не ссылку. – PaulMcKenzie
cout << (* pol) [exp]; Я думаю, что это произойдет, если значение станет 0, потому что вы удалите несколько строк выше. – Alex