【发布时间】:2016-04-28 02:00:51
【问题描述】:
由于某种原因,我无法创建指针迭代器。它被禁用了吗?我试过了,但是没用……
#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>')|
【问题讨论】:
-
您是否有任何理由将
listItem作为指针而不是引用传递? -
因为我喜欢指针@tadman。 (奇怪的字符..)
-
你喜欢什么,什么是好主意,在这里很明显是odds。从性能和代码正确性的角度来看,指针有许多缺点。使用最好的工具来完成这项工作,而不是你最习惯的工具。您只是假设
listItem是一个有效指针,而不是NULL,这可能是一个大错误。引用通常总是有效的,所以这个测试由编译器完成,不需要代码。 -
另外,列表容器已经有了指针,所以指针内的指针指向指针??? xD
-
*listItem->begin()应该是listItem->begin()或(*listItem).begin()。end也一样。
标签: c++ pointers listiterator