gpt4 book ai didi

c++ - 如何从 VS2010 中基于范围的循环/for_each 获取指针?

转载 作者:搜寻专家 更新时间:2023-10-31 01:50:39 25 4
gpt4 key购买 nike

我正在使用 Visual Studio 2010。我想使用的一项功能是基于范围的 for 循环,VS2010 中没有但包含在 VS2012 中的功能。

在 VS2012 中,您可以像这样进行整洁而 super 整洁的 for 循环:

for( auto& it: myElements )
it->something();

到目前为止,我在 VS2010 中能得到的最接近的语法是:

for( auto it = myElements.begin(), end = myElements.end(); it != end; it++ )
it->something();

在阅读了一些相关问题后,我发现使用 boost\foreach 我可以访问以下宏:

BOOST_FOREACH( auto it, myElements ){
it.something();
}

我对这种方法的问题是它给出了一个拷贝(或类似的东西),而不是一个指针。这是我感到困惑的地方。 foreach reference说如下:

It does no dynamic allocations, makes no virtual function calls or calls through function pointers, and makes no calls that are not transparent to the compiler's optimizer.

这是什么意思?这不是拷贝吗?

如何从 BOOST_FOREACH 获取指针?或者我应该使用其他一些 boost 功能?

我在这里的其他问题中看到过这种语法:

BOOST_FOREACH( auto& it, myElements ){
it->something();
}

然而这并没有为我编译并在编辑器中抛出错误。这有什么问题吗?为什么我在这里发现它是许多其他问题的有效代码?

对于基于范围的 for 循环,VS2010 中是否有任何简洁的解决方案? (包括使用 boost )

最佳答案

主要问题是,你有指针容器吗?即使在 VS2012 中,for(auto& it: myElements) it->something(); 也仅适用于(智能)指针的容器。 & 告诉您 是一个引用,-> 告诉您它是一个指针。这并不矛盾;您可以引用指针。

但是你为什么想要一个指针呢?引用更为地道。

关于c++ - 如何从 VS2010 中基于范围的循环/for_each 获取指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14807018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com