инициализация новой карты и установка в Stack Overflow

Привет, я делаю домашние задания и у меня проблема.

Мне нужны разные карты и установить в приложении, и я хочу использовать некоторые переменные.
У меня есть это глобальные переменные

map<char,set<char> > IAF; //I Am Father
map<char,int> NBM; //Number Before Me
set<char> WCR; //Who can run

и каждый раз в основном мне нужно сбросить эти переменные.

Я сделал две вещи:

IAF = new map<char,set<char> >;

а также

IAF = map<char,set<char> >;

Но ни один не побежал.

Кто-нибудь может мне помочь?

0

Решение

использование

IAF.clear()
NBM.clear()
WCR.clear()

(Изменить: ссылки на спецификации и предостережения)

Обратите внимание, что если вы храните указатели, clear() удалит указатели, но это не удалит память, на которую указывают указатели.

2

Другие решения

map<char,set<char> > IAF;

Это определение переменной. Это не указатель. Если вы хотите сделать какую-то инициализацию, вы можете использовать один из поддерживаемые методы, например:

std::copy( differentContainer.begin(), differentContainer.end(), IAF.begin());

или же

while( ...) {
IAF.insert( ...);
// or
IAF[ key] = value;
}

Чтобы удалить содержимое карты, вы можете сделать это (это не приведет к автоматическому удалению памяти, на которую указывает указатель на карте — если вы храните указатели, тогда используйте умные указатели):

IAF.clear();
1

В дополнение к предыдущим ответам, которые довольно ясны. new Ключевое слово, которое вы использовали в какой-то момент, — это выделение памяти для указателя.

map<char, set<char> > *IAF = new map<char, set<char> >;
//...
// free the memory
delete IAF;

Проверить Динамическое распределение памяти для получения дополнительной информации и понимания когда а также как использовать указатели.

Кроме того, используя

IAF =  map<char,set<char> >;

Это неверно. map<char, set<char> > это имя класса (в сочетании с шаблонами общего программирования, см. ответ на Каково значение "общее программирование" в с ++? ) и, следовательно, вы не можете назначить его переменной таким образом. То, что вы хотите сделать, это вызвать конструктор, который будет возвращать экземпляр этого класса:

IAF = карта> ();

Однако делать это таким образом неэффективно. Создает временный объект, уничтожает IAF, копирует временное, а затем уничтожает временное (если вы не используете C ++ 11 и в этом случае вы используете move, но до сих пор…). Итак, лучше использовать clear() как указано в других ответах.

0
По вопросам рекламы [email protected]