簡體   English   中英

C ++:用於循環和向量

[英]C++ : For Loop and Vectors

我一直在工作MaxCounters的Codility。 而且我被卡住了。 無論我如何嘗試,以下代碼都不會循環

// you can also use includes, for example:
// #include <algorithm>

vector<int> solution(int N, vector<int> &A) 
{
    vector<int> counter (N,0);

    for (int i = 0;i < A.size();i++)
    {
        int value = A.at(i);

        if (value = A.size() + 1)
        {

        }
        else
            counter[value - 1] += 1;
    }

    return (counter);
}

我已經使用該網站找到了解決我的問題的方法,但無濟於事。 我不斷收到此錯誤消息。

在user.cpp:20包含的文件中:func.cpp:在函數'std :: vector> solution(int,std :: vector>&)'中:func.cpp:7:警告:有符號和無符號整數表達式之間的比較func.cpp:11:警告:建議在賦值周圍加上括號以用作真值

任何想法為什么它總是拋出該錯誤?

編輯:從其他測試看后,很明顯,無論我做什么運動,我都會得到此錯誤。 因此,我得出的結論是我不了解循環向量。 遍歷向量的正確方法是什么?

正如編譯器所建議的那樣:

if (value = A.size() + 1)

給值賦A.size()+ 1的值,而不評估它們的相等性

if (value == A.size() + 1)

可能是您想要的。

另外, size()返回一個無符號的int,而不是int ,因此編譯器對此有所抱怨。

您將收到兩個不同的警告。 第一個與這個問題有關:

if( value = A.size() + 1)

...這只是一個錯字,應寫為:

if( value == A.size() + 1 )

解決后,您可以繼續下一個警告:

一個有符號的int A.size()返回一個無符號值。 您可以將for( int i = 0; i < A.size(); ++i)更改for( size_t i = 0....

由於您存儲的所有int可能都是正數,因此請使用適當的容器類型(例如,無符號)。 外觀如下:

vector<unsigned> solution(int N, vector<unsigned> &A) 
{
    vector<unsigned> counter (N,0);

    for (size_t i = 0;i < A.size();i++)
    {
        unsigned value = A.at(i);

        if ( value == A.size() + 1 )
        {

        }
        else
            counter[value - 1] += 1;
    }

    return (counter);
}

比較未簽名的對象或將未簽名的對象分配給已簽名的對象值得生成警告的原因是,已簽名容器與未簽名容器的范圍不同。

您的程序應通過以下方式進行更新

  1. 這應該避免比較有符號和無符號整數之間的比較。

    對於(int i = 0; i <A.size(); i ++)

   for (vector<int>::size_type i = 0;i < A.size();i++)
  1. 由於您的循環正在處理size() ,因此您應該使用[]運算符,而不是at,因為它內部確實會檢查越界訪問。 這是可以避免的。

    int值= A.at(i);

 int value = A[i];
  1. 這實際上是一個主要問題,在您的代碼中,因為您使用=而不是==。

    如果(值= A.size()+ 1)

   if (value == A.size() + 1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM