По какой-то причине я не могу сделать итератор указателя. Это отключено? Я пытался сделать это, но это не работает …
#include <iostream>
#include <list>
#include <vector>
#include <string>
template<class T>
void convertListToVector(std::list<T> *listItem) {
typename std::list<T>::iterator it;
for (it = *listItem->begin(); it != *listItem->end(); it++)
std::cout << *it <<std::endl;
}
int main()
{
std::list<std::string> listExample;
listExample.push_back("2");
listExample.push_back("3");
listExample.push_back("5");
convertListToVector(&listExample);
return 0;
}
Ошибка:
error: no match for 'operator=' (operand types are 'std::list<std::basic_string<char> >::iterator {aka std::_List_iterator<std::basic_string<char> >}' and 'std::basic_string<char>')|
error: no match for 'operator!=' (operand types are 'std::list<std::basic_string<char> >::iterator {aka std::_List_iterator<std::basic_string<char> >}' and 'std::basic_string<char>')|
Вы можете просто использовать их как ссылки и упростить для себя …
#include <iostream>
#include <list>
#include <vector>
#include <string>
template<class T>
void convertListToVector(std::list<T> &listItem) {
typename std::list<T>::iterator it;
for (it = listItem.begin(); it != listItem.end(); it++)
std::cout << *it <<std::endl;
}
int main()
{
std::list<std::string> listExample;
listExample.push_back("2");
listExample.push_back("3");
listExample.push_back("5");
convertListToVector(listExample);
return 0;
}
Используйте ссылки все время. Только указатели, когда вы иметь к. Вы можете спросить почему?
В C ++ 11:
int *p1 = nullptr;
Другой C ++:
int *p1 = NULL;
int *p2 = 0;
1: обратите внимание, что вы не можете изменить ссылки, на которые ссылаются, поэтому просто добавьте ключевое слово const
перед вашими ссылками, чтобы они не меняли то, на что они указывают. Это лучшая практика, которая также гарантирует, что вы не совершите глупую ошибку, поскольку измените ссылки, на которые ссылаются ваши ссылки.
const int x = 0;
const int &ref = x
Вам не нужно использовать operator*
совсем, listItem->begin()
вернет итератор.
for (it = listItem->begin(); it != listItem->end(); it++)
std::cout << *it <<std::endl;
}
Я пытаюсь ответить на ваш вопрос прямо, как сказал другой ответчик, вам не нужно пропускать listItem
по указателю здесь, передача по ссылке должна быть достаточной.