Tag: foreach

为什么从C ++ 11中删除对范围访问?

我刚刚发现,C ++ 11草案有一个std::begin / std::end重载std::pair ,允许将一对迭代器视为适合在基于范围的for循环中使用的范围(N3126,第20.3.5.5节),但是这已经被删除。 有谁知道为什么它被删除? 我发现删除非常不幸,因为它似乎没有其他的方式来处理一对迭代器作为范围。 确实: 在基于范围的for循环中,begin / end的查找规则表示在1)中将begin / end作为范围对象的成员函数2)作为“关联名称空间”中的自由函数进行查找 std::pair没有开始/结束成员函数 std::pair<T, U>唯一相关的命名空间通常是命名空间std 我们不允许自己为std::pair加载std::begin / std::end 我们不能将std::begin / std::end专门化为std::pair (因为专精必须是部分的,而且不允许用于函数) 有没有其他的方式,我失踪了?

每个循环的C#以什么顺序迭代List <T>?

我想知道在C#中的foreach循环通过System.Collections.Generic.List<T>对象循环的顺序。 我发现了另一个关于同一个话题的问题,但是我不觉得这个问题对我的满意度回答了我的问题。 有人说没有定义订单。 但是,正如其他人所说,它遍历一个数组的顺序是固定的(从0到Length-1)。 8.8.4 foreach语句 还有人说,对于任何具有订单的标准类(例如List<T> )也是如此。 我找不到任何文件来支持。 所以我知道现在可能会这样工作,但也许在下一个.NET版本中,它将是不同的(即使它不太可能)。 我也看了List(t).Enumerator文档没有运气。 另一个相关的问题指出,对于Java,在文档中特别提到: List.iterator()以适当的顺序返回此列表中元素的迭代器。 我正在寻找类似于C#文档中的东西。 提前致谢。 编辑:谢谢你所有的答案(惊人的速度有多less回复)。 我从所有的答案中得知, List<T>总是按照索引的顺序进行迭代。 但是我仍然希望看到文档的清晰和平,类似于List上的Java文档 。

在C#中,为什么我不能在foreach循环中修改值types实例的成员?

我知道值types应该是不变的,但这只是一个build议,而不是一个规则,对吗? 那么为什么我不能这样做: struct MyStruct { public string Name { get; set; } } public class Program { static void Main(string[] args) { MyStruct[] array = new MyStruct[] { new MyStruct { Name = "1" }, new MyStruct { Name = "2" } }; foreach (var item in array) { item.Name = "3"; } //for (int […]

是否在foreach(item中的T item)之前是多余的(items!= null)?

我经常遇到如下代码: if ( items != null) { foreach(T item in items) { //… } } 基本上, if条件确保只有在items不为null时才会执行foreach块。 我想知道如果条件是真的需要,或者foreach将处理的情况下,如果items == null 。 我的意思是,我可以简单写一下吗? foreach(T item in items) { //… } 而不用担心items是否为空? if条件是多余的? 或者这取决于items的types ,或者也可能在T ?

基于范围的工作对于普通数组是如何工作的?

在C ++ 11中,你可以使用基于范围的,作为其他语言的foreach 。 它甚至可以用简单的C数组工作: int numbers[] = { 1, 2, 3, 4, 5 }; for (int& n : numbers) { n *= 2; } 它如何知道何时停止? 它只适用于已经在相同的作用域中声明的静态数组吗? 你将如何使用这个dynamic数组?

是否有可能遍历variablesmacros中的参数?

我想知道是否有可能迭代传递给在C99 variadicmacros或使用任何GCC扩展的参数? 例如,是否有可能编写一个通用的macros,它采用一个结构和它的字段作为parameter passing,并打印结构中每个字段的偏移量? 像这样的东西: 结构{ int a; int b; int c; }; / * PRN_STRUCT_OFFSETS将打印每个字段的偏移量 在作为第一个论点的结构之内。 * / int main(int argc,char * argv []) { PRN_STRUCT_OFFSETS(struct a,a,b,c); 返回0; }

是否有可能使用boost :: foreach和std :: map?

我发现boost :: foreach非常有用,因为它节省了我很多的写作。 例如,假设我想打印列表中的所有元素: std::list<int> numbers = { 1, 2, 3, 4 }; for (std::list<int>::iterator i = numbers.begin(); i != numbers.end(); ++i) cout << *i << " "; boost :: foreach使上面的代码更加简单: std::list<int> numbers = { 1, 2, 3, 4 }; BOOST_FOREACH (int i, numbers) cout << i << " "; 好多了! 然而,我从来没有想出一个方法(如果可能的话)使用它的std::map s。 该文档只有像vector或stringtypes的例子。

用嵌套的Foreach语句迭代multidimensional array

我认为这可能是一个非常简单的问题,但我还没有弄清楚。 如果我有这样的二维数组: int[,] array = new int[2,3] { {1, 2, 3}, {4, 5, 6} }; 用嵌套的foreach语句遍历数组的每个维度的最佳方法是什么?

foreach()是否通过引用迭代?

考虑一下: List<MyClass> obj_list = get_the_list(); foreach( MyClass obj in obj_list ) { obj.property = 42; } 'obj'是对列表中相应对象的引用,所以当我改变属性的时候,这个改变会一直存在于对象实例中。

c#foreach(property in object)…有没有一个简单的方法来做到这一点?

我有一个包含多个属性的类(如果有任何区别,所有都是string)。 我也有一个列表,其中包含许多不同的类实例。 当为我的类创build一些unit testing时,我决定循环遍历列表中的每个对象,然后遍历该对象的每个属性。 我以为这样做会很简单 foreach (Object obj in theList) { foreach (Property theProperties in obj) { do some stufff!!; } } 但是这没有工作! :(我得到这个错误… “foreach语句不能对'Application.Object'types的variables进行操作,因为'Application.Object'不包含'GetEnumerator'的公共定义 有没有人知道这样做没有吨ifs和循环或没有进入任何太复杂的方式吗?