C#foreach에서 자체 정렬에 데이터 추가
main.cpp
#include <iostream>
#include <vector>
using namespace std;
void Print(vector<int> v)
{
for (auto& i : v)
{
cout << " " << i ;
}
cout << endl;
}
int main()
{
vector<int> vkeep{ 5, 5, 0, 5, 1 }; //5個
Print(v);
cout << "--- rfor内で自身のコンテナ追加 ------rforの値がバグる--------------" << endl;
for (auto& i : v)
{
cout << " " << i ;
if (i == 5)
v.emplace_back(123);
//v.push_back(123);
}
cout << endl << "-----5は3つあるので3つ123が増えないといけないが、バグっている-----" << endl;
Print(v);
}
실행 결과, 이동 전화의 위치가 이상해지고 오류가 아니라 오류가 발생했습니다<<규격과 같습니다(디버깅이나 디버깅 실행 중 오류가 발생했으면 좋겠습니다...)실행 결과: 요소 수가 증가하지 않아도 값은 -52662307로 나타납니다
--- rfor内で自身のコンテナ追加 ------rforの値がバグる--------------
5 -572662307 -572662307 -572662307 -572662307
이 C#버전을 만드는 김에 λ기술방법도 잊어버렸으니 확인해 보세요결론적으로 원소 수량을foreach 내의 자체 배열(List)으로 늘리면 실행 중 오류가 발생합니다.
다음은 다른 배열(List)이 준비되어 있으며, 잠시 여기에 추가(Addrange)
main.cs
using System;
using System.Collections.Generic;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
List<int> v = new List<int>(){ 5, 5, 0, 5, 1 };
var vpp = new List<int>();
foreach (var a in v)
{
//if (a == 5) v.Add(123); //error
if (a == 5) vpp.Add(123);
}
// ラムダで書いたバージョン
//v.ForEach(a => { if (a == 5) v.Add(123); }); //error
//v.ForEach(a => { if (a == 5) vpp.Add(123); });
v.AddRange(vpp); // v配列に appデータを増やす
foreach(var a in v)
{
Console.Write(" {0}",a);
}
// ラムダで書いたバージョン
//v.ForEach(a =>{
// Console.Write(" {0}",a);
//});
Console.WriteLine();
}
}
}
실행 결과Hello World!
5 5 0 5 1 123 123 123
참고로 잘못된 주석 행의 주석을 제거하더라도 구축 오류가 발생하지 않습니다.실행 중 오류가 발생했습니다.C#에서 foreach에서 자체 정렬을 변경할 수 없습니다.
실행 후 오류는foreach 줄에 바로 나타납니다.
C++에서 참조형을 사용하면 rfor 내의 배열 내의 값은 변경할 수 있지만 C#에서foreach 내에서는 변경할 수 없습니다.
그 요소에 대한 증가도 마찬가지다.
※ 비주얼스튜디오는 2010년 C#에서foreach에서 자신의 값을 변경할 수 있어 편리하다...시대의 트렌드인가
Reference
이 문제에 관하여(C#foreach에서 자체 정렬에 데이터 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/loppta/items/1b7f16a60a4010d664e6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)