C 11基于范围,用于指针矢量

C 11基于范围,用于指针矢量,第1张

概述我刚刚编译了GCC 4.6.0,我想尝试新功能,从基于范围的for循环开始. 我想改变的第一个循环是迭代std ::指针向量.我更改了代码以使用新语法,但它没有编译. 我试图用另一个替换for循环,它是在一个std :: vector of structs上,它编译并运行完美. 这是一个简短的测试代码,向您展示我的问题: #include <vector>#include <iostream> 我刚刚编译了GCC 4.6.0,我想尝试新功能,从基于范围的for循环开始.
我想改变的第一个循环是迭代std ::指针向量.我更改了代码以使用新语法,但它没有编译.

我试图用另一个替换for循环,它是在一个std :: vector of structs上,它编译并运行完美.

这是一个简短的测试代码,向您展示我的问题:

#include <vector>#include <iostream>int main(){    std::vector< int > values;    values.push_back(2);    values.push_back(5);    values.push_back(8);    values.push_back(13);    values.push_back(17);    for (int &n : values)    {        std::cout << n << "\n";    }    std::vector< int* > pointers;    pointers.push_back(new int(2));    pointers.push_back(new int(5));    pointers.push_back(new int(8));    pointers.push_back(new int(13));    pointers.push_back(new int(17));    for ((int*) &p : values)    {        std::cout << (*p) << "\n";    }    for( unsigned int i = 0; i < pointers.size(); ++i)    {        delete pointers[i];    }    return 0;}

当我尝试编译它时(是的,我将-std = c 0x作为g的参数),它会因此错误而死:
main.cpp | 27 |错误:在嵌套名称说明符中找到’:’,预期’::’
如果我评论27-30行,那就没关系.

我究竟做错了什么?指针引用声明语法不正确吗?
或者是否存在包含类型的限制,其中可以使用基于范围的for循环?

谢谢你的帮助!

解决方法
for ((int*) &p : values)

这是错的. (int *)是一个表达式,所以你需要做int *& (没有括号,这使得表达式 – 也就是“不是类型名称”)至少使其正确.我个人喜欢使用auto或auto&.

你可以做 :

for (auto p : values) // here p is a pointer,a copy of each pointer

要么

for (auto& p : values ) // here p is a non-const reference to a pointer

要么

for ( int* p : values ) // here p is a copy of each pointer

或者在通用代码中:

for ( auto&& p: values ) // p is either a const reference to what is in values,or a non-const reference,depends on the context
总结

以上是内存溢出为你收集整理的C 11基于范围,用于指针矢量全部内容,希望文章能够帮你解决C 11基于范围,用于指针矢量所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1243769.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存