나는 int의 QList를 가지고있다.QList <int> 값 바꾸기
foreach (int val, valList) {
val-= 1;
}
그러나 valList의 qDebug가 그 값은 내가 잘못 무슨 짓을 10으로 유지 보여줍니다
eg: [10,10];
그때 나는 시도 1.
하여 값을 줄이려?
나는 int의 QList를 가지고있다.QList <int> 값 바꾸기
foreach (int val, valList) {
val-= 1;
}
그러나 valList의 qDebug가 그 값은 내가 잘못 무슨 짓을 10으로 유지 보여줍니다
eg: [10,10];
그때 나는 시도 1.
하여 값을 줄이려?
나중에 C++ 11이 시도 것 컴파일을 시도하지 않았습니다.
당신은 the official documentation로 반복 처리하는 컨테이너 내에서 값을 변경 foreach
을 사용할 수 없습니다 말한다 : 그것은 foreach 루프에 들어갈 때
Qt는 자동으로 용기의 사본을합니다. 반복 할 때 컨테이너를 수정하면 해당 은 루프에 영향을주지 않습니다. (당신이 컨테이너를 수정하지 않으면, 복사 는 여전히 발생하지만, 컨테이너 를 복사 암시 공유 덕분에 매우 빠릅니다.)
foreach는 컨테이너의 복사본을 생성 때문에, const가 아닌 참조를 사용 변수에 대해 원래 컨테이너를 수정할 수 없습니다. 복사본에만 영향을 미치며 이는 아마도 이 원하는 것은 아닙니다.
Qt의 foreach 루프 대신 사용할 수있는 범위 기반은 C++ 11 이후의 부분입니다. 그러나 범위 기반 은 Qt 컨테이너를 강제로 분리 할 수 있지만 foreach는 분리하지 않을 수 있습니다. 그러나 foreach를 사용하면 컨테이너를 항상 복사하는데, 일반적으로 STL 컨테이너에 대해서는 이 아닙니다. 의심스러운 경우 Qt 컨테이너의 경우 foreach를 선호하고 STL의 경우 범위를 사용하십시오.
void changeIntVals(QList<int>& valList) { for(auto& val: valList) { val -= 1; } }
추신 :
Niceeee .. 감사합니다. 선생님. – GeneCode