是否有在 C++ 中循环“一直通过”数组的最佳实践?

Posted

技术标签:

【中文标题】是否有在 C++ 中循环“一直通过”数组的最佳实践?【英文标题】:Is there a best-practice for looping "all the way through" an array in C++? 【发布时间】:2014-07-24 21:58:38 【问题描述】:

在 Python 中,可以使用以下代码将数组的每个元素与“下一个”元素(包括最后一个元素和第一个元素)进行比较:

a = [0, 1, 2, 3]
for i in range(-1, 3):
    if a[i] + 1 >= a[i+1]:    
        print a[i], 'works'

输出:

3 works
0 works
1 works
2 works

如果我想将数组的第一个元素与第二个元素进行比较,将第二个元素与第三个元素进行比较,等等,最后将最后一个元素与第一个元素进行比较,我只需一个循环即可在 Python 中。

我可以在 C++ 中做到这一点吗?我可以以这种方式循环元素,同时完全保持在一个循环中吗?为了进一步说明我的意思,这里有一些与上述 Python 代码具有相同功能的 C++ 代码。

int a[] = 0, 1, 2, 3;
std::cout a[3] << std::endl;
for(int i = 0; i < 2; i++)
    std::cout << a[i] << std::endl;

它具有相同的输出。我的观点是,对于某些算法,我必须为某些步骤手动复制我的 for 循环的内容。例如,如果我想查看第一个元素是否等于第二个、第二个和第三个等,最后如果最后一个等于第一个,我必须在 for 循环之后或之前手动添加此步骤. ---if (a[0] == a[3]) foo();

这是我在 C++ 中应该做的吗?我对它很陌生,我不想扎根于不良做法。

【问题讨论】:

您可以为向量或列表重载 [] 运算符,这样如果给定一个负数 x,它将运行 [size-x],这样您就可以在 Python 中做同样的事情... “在 Python 中,可以使用以下代码将数组的每个元素与“下一个”元素 […] 进行比较:“嗯,不是吗? @nonchip 抱歉,我现在修复了帖子。 我想比较第一个元素和第二个元素?这是您在 C++ 中比较元素的方式: for(int i = 0; i 【参考方案1】:
for (int i=3; i<(3 + size_of_array); ++i)
    std::cout << a[i % size_of_array] << '\n';

【讨论】:

谢谢。这很酷,因为它非常通用 --- 我几乎可以用任何语言使用它!【参考方案2】:

使用std::begin()std::end() 算法。

int a[3]=1,2,3;
for( auto x=end(a)-1; x>=begin(a); --x)
    cout<<*x<<endl;

上面的代码输出3 2 1,数组a的逆序。看看[begin()][1]

【讨论】:

这个问题没有问如何以相反的顺序遍历一个数组。它是在询问如何向前迭代,然后到了最后,他想从头开始。 @BenjaminLindley 这个问题做了! 他在问如何比较相邻的元素和最后一个与第一个。

以上是关于是否有在 C++ 中循环“一直通过”数组的最佳实践?的主要内容,如果未能解决你的问题,请参考以下文章

Partials vs for 循环——最佳实践

Java for 循环最佳实践

C++,最佳实践,int 还是 size_t? [复制]

在 C++ 中存储和搜索数字的最佳方法

将 C 组件集成到 C++ 框架中的最佳实践是啥?

用于检查字符串列表/数组中的字符串的 C# 最佳实践 (LINQ) [关闭]