gpt4 book ai didi

C++11 基于范围的指针 vector

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:06:42 24 4
gpt4 key购买 nike

我刚刚编译了 GCC 4.6.0,我想尝试新功能,从基于范围的 for 循环开始。
我想要更改的第一个循环是在指针的 std::vector 上迭代。我更改了代码以使用新语法,但它没有编译。

我尝试用另一个 for 循环代替,它位于结构的 std::vector 上,它编译并运行得很好。

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

#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|error: found ‘:’ in nested-name-specifier, expected ‘::’

如果我注释掉第 27-30 行,就可以了。

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

最佳答案

for ((int*) &p : values)

这是错误的。 (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 基于范围的指针 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5707869/

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