Я новичок в C++ и имеют простую программу, как показано нижеПочему карта создавать новые записи с оператором []
#include <iostream>
#include <map>
#include <vector>
using namespace std;
int main()
{
std::map<std::string, double*> testMap;
std::vector<std::string> v = {"A", "B", "C"};
for(size_t i=0;i<v.size();++i)
{
std::string sym = v[i];
double* d = testMap[sym];
if(!d) continue;
cout << "this";
}
for(std::map<std::string, double*>::iterator itr=testMap.begin();itr!=testMap.end();++itr)
{
cout << itr->first << " " << itr->second << std::endl;
}
return 0;
}
и его O/P является
sh-4.3$ main
A 0
B 0
C 0
Мой вопрос, почему карта создает новые элементы с нулевыми указателями двойных
, потому что это то, что он делает, когда элемент не существует: http://en.cppreference.com/w/cpp/container/map/operator_at так дефолт к нулевому указателю в этом случае, вы объявили пустую карту, но затем попытаетесь получить доступ к элементам в местах, которые не существуют – EdChum
Что вы ожидаете от этого? –
Я подозреваю, что вы думаете, что он должен вести себя как элемент 'find'' std :: map', который возвращает конечный итератор при сбое в локализации. Если это поведение, которое вы хотите, то это функциональность, которую вы должны использовать; не 'operator []'. – WhozCraig