Привет, я делаю домашние задания и у меня проблема.
Мне нужны разные карты и установить в приложении, и я хочу использовать некоторые переменные.
У меня есть это глобальные переменные
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> >;
Но ни один не побежал.
Кто-нибудь может мне помочь?
использование
IAF.clear()
NBM.clear()
WCR.clear()
(Изменить: ссылки на спецификации и предостережения)
Обратите внимание, что если вы храните указатели, clear()
удалит указатели, но это не удалит память, на которую указывают указатели.
map<char,set<char> > IAF;
Это определение переменной. Это не указатель. Если вы хотите сделать какую-то инициализацию, вы можете использовать один из поддерживаемые методы, например:
std::copy( differentContainer.begin(), differentContainer.end(), IAF.begin());
или же
while( ...) {
IAF.insert( ...);
// or
IAF[ key] = value;
}
Чтобы удалить содержимое карты, вы можете сделать это (это не приведет к автоматическому удалению памяти, на которую указывает указатель на карте — если вы храните указатели, тогда используйте умные указатели):
IAF.clear();
В дополнение к предыдущим ответам, которые довольно ясны. 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()
как указано в других ответах.