2011-02-01 2 views
0
map <int, char*> testmap; 
testmap[1] = "123"; 
testmap[2] = "007"; 
map<int, char*>::iterator p; 

for(p = my_map.begin(); p != my_map.end(); p++) { 
int len = strlen(p); // error here, why? thanks 
cout << len << endl; 
    cout << p->first << " : "; 
    cout << p->second << endl; 
} 

У меня ошибка на эту ложь: int len ​​= strlen (p), я хочу получить длину массива. Как ее исправить? Спасибо!C++, итератор вопрос

+0

Возможно, вы захотите использовать const size_t len ​​= strlen (p.second); вместо – stijn

+4

Используйте 'string'! –

+1

В дополнение к предупреждению, поскольку stijn предлагает рассмотреть использование const_iterator, приращение приращения ++ p и назначение end() вне цикла для точек производительности и стиля. – AJG85

ответ

7

Я предполагаю, что вы имеете в виду

strlen(p->second); 
+2

+1 для решения, но -1 для не предполагая, используя 'string' –

3
strlen(p->second) 

р итератор

+0

Я должен сказать, что p - итератор карты, поэтому вам нужно явно указать, что вы хотите найти длину значения –

+1

'p.second'? Вы уверены, что? –

+0

карта итераторы возвращают итератор типа пары

4

Еще лучше использовать зУю строку:

map <int, std::string> testmap; 
testmap[1] = "123"; 
testmap[2] = "007"; 
map<int, std::string>::iterator p; 

for(p = testmap.begin(); p != testmap.end(); p++) { 
    int len = p->second.size(); 
    cout << len << endl; 
    cout << p->first << " : "; 
    cout << p->second << endl; 
} 
+3

+42: Ради дерьмо в , не используйте старые, жесткие C-style 'char *' строки с 'map'. Собственно, вообще не используйте их в C++. –

0

р итератор для пары кнопочного стоимость. И вам нужна только ценность.

1
map <int, char*> testmap; 
testmap[1] = "123"; 
testmap[2] = "007"; 
map<int, char*>::iterator p; 

for(p = my_map.begin(); p != my_map.end(); p++) { 
    int len = std::iterator_traits<p>::value_type.size(); 
    cout << len << endl; 
    cout << p->first << " : "; 
    cout << p->second << endl; 
} 
+2

Пояснение было бы полезно. – CCoder

Смежные вопросы