相关疑难解决方法(0)

在C/C#/ C++中进行向后循环的最佳方法是什么?

我需要向后移动一个数组,所以我有这样的代码:

for (int i = myArray.Length - 1; i >= 0; i--)
{
    // Do something
    myArray[i] = 42;
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法呢?

更新:我希望C#可能有一些内置机制,如:

foreachbackwards (int i in myArray)
{
    // so easy
}
Run Code Online (Sandbox Code Playgroud)

更新2:有更好的方法.符文获奖:

for (int i = myArray.Length; i-- > 0; )
{    
    //do something
}
//or
for (int i = myArray.Length; i --> 0; )
{
    // do something
}
Run Code Online (Sandbox Code Playgroud)

在常规C中看起来更好(感谢Twotymz):

for (int i = lengthOfArray; i--; )
{    
    //do something
}
Run Code Online (Sandbox Code Playgroud)

c c# c++

92
推荐指数
6
解决办法
13万
查看次数

如何处理"签名/未签名的不匹配"警告(C4018)?

我使用大量用C++编写的计算代码,考虑到高性能和低内存开销.它大多使用STL容器vector,并且几乎在每个函数中遍历那些容器.

迭代代码如下所示:

for (int i = 0; i < things.size(); ++i)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

但它会产生签名/未签名的不匹配警告(Visual Studio中的C4018).

替换int某种unsigned类型是一个问题,因为我们经常使用OpenMP pragma,它需要计数器int.

我即将压制(数百个)警告,但我担心我错过了一些优雅的解决方案.

在迭代器上.我认为在适当的地方应用迭代器很棒.我正在使用的代码永远不会将随机访问容器更改为list某种东西(因此迭代int i已经是容器不可知),并且总是需要当前索引.您需要键入的所有其他代码(迭代器本身和索引)只会使问题复杂化并模糊底层代码的简单性.

c++ refactoring

71
推荐指数
5
解决办法
9万
查看次数

标签 统计

c++ ×2

c ×1

c# ×1

refactoring ×1