2017-09-19 6 views
0

나는 int의 QList를 가지고있다.QList <int> 값 바꾸기

foreach (int val, valList) { 
    val-= 1; 
} 

그러나 valList의 qDebug가 그 값은 내가 잘못 무슨 짓을 10으로 유지 보여줍니다

eg: [10,10]; 

그때 나는 시도 1.

하여 값을 줄이려?

답변

2

나중에 C++ 11이 시도 것 컴파일을 시도하지 않았습니다.

+0

Niceeee .. 감사합니다. 선생님. – GeneCode

3

당신은 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; 
    } 
} 

추신 :

+0

Ahhh ..... 나는 대신에 for 루프를 사용해야한다. – GeneCode

+1

예, 그렇게 할 수 있습니다. – Dmitry