其他分享
首页 > 其他分享> > c – 如何制作指针迭代器?

c – 如何制作指针迭代器?

作者:互联网

由于某种原因,我无法创建指针迭代器.它被禁用了吗?我试着这样做但它不起作用……

#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;
}

经验法则

一直使用引用.只有你必须指针.你可能会问为什么?

>指针往往会使程序员感到困惑.即使是有经验的人
>指针可以改变他们“指向”的内容.这可能很糟糕
在某些场合.
>指针可以为null ..例如:

在C 11中:

   int *p1 = nullptr;

其他C:

   int *p1 = NULL;
   int *p2 = 0;

>引用必须引用一个对象.意思是你不能放一个数字
在int的’引用’上

最佳实践

1:请注意,您无法更改引用的引用,因此只需在引用之前添加关键字const,这样它们就不会更改它们指向的内容.这是最佳实践,也确保您不会因为更改引用引用的内容而犯下一个愚蠢的错误.

  const int x = 0;
  const int &ref = x 

标签:listiterator,c,pointers
来源: https://codeday.me/bug/20190829/1758669.html