Inicializar el vector cero

Inicialmente el vector «perm» es nulo. Quiero establecer a cero, basado en el índice del bucle. Pero he encuentro de error «vector subíndice fuera del intervalo» mientras se hace el siguiente código.

Puse «perm(charLength, 0)» en el «Start()» método fuera de cualquier bucle de modo que no se perderá, sino que se utiliza para la acumulación de valores.

DecodeEngine.h

class DecodeEngine
{

public:

    vector<int> temp;
    vector<int> perm;

    //Default constructor
    DecodeEngine();


    //Declare a virtual destructor:
    virtual ~DecodeEngine();

    //Methods
    string GetFilePath();
    Mat Start();
    void FrameTo8by8();         
};

DecodeEngine.cpp

Mat DecodeEngine::Start()
{
  charLength = 160;

  //Initialize perm to zero
  perm(charLength, 0);

  //Loop 1st 100 frame of header
  while(true)
  {
     if(frame_count <= 100)
     {
        FrameTo8by8();                  //Proccess and algorithm

        namedWindow("dctBlockImage"); 
        imshow("dctBlockImage", dctImage);      //display watermarked image

        if(waitKey(30) == 27) //wait for 'esc' key press for 30 ms. If 'esc' key is pressed, break loop
        {
            cout << "esc key is pressed by user" << endl; 
            break; 
        }

        frame_count++;
     }

     else
     {
        cout << endl;
        cout << "End of video" << endl;
        cout << endl;

        destroyWindow("Original Video");
        destroyWindow("dctBlockImage");
        break;
     }
}




void DecodeEngine::FrameTo8by8()
{
  for(int i = 0; i < height-16; i += 16)
  {
    for(int j = 0 ; j < width-16; j += 16)
    {
       if(j > 112)
       {
           if(((sum4 / 4) - avg) > 0)
           {
              value = 0;
              temp.push_back(value);
           }

           else
           {
              value = 1;
              temp.push_back(value);
           }
       }

       if(temp.size() == charLength)
       {
          for(int a = 0; a <= temp.size(); a ++)
          {
             //Initialize perm to zero
             perm[a] = 0;

             if(temp[a] == 1)
             {
                perm[a]++;
             }

             //Reset temp for next frame to use
             temp[a] = 0;
          }
       }                

    }
  }
}
  • No le dijo acerca de for(int a = 0; a <= temp.size(); a ++) la última vez que se le preguntó acerca de esto?
  • algunos de mis códigos faltan en el post anterior, estas es la nueva pregunta
InformationsquelleAutor user3743939 | 2014-08-12

2 Kommentare

  1. 2

    Esta línea:

    perm(charLength, 0);

    No se llama al constructor std::vector(size_t, const T&) e inicializar el vector con 160 elementos de valor 10. De hecho, no veo la manera de que compilan a todos desde el vector de la clase no tiene un operator().

    std::vector contiene una función miembro assign() que usted puede en lugar de:

    perm.assign(charLength, 0);
    • Gracias tengo la opción de inicializar a cero.
  2. 0

    En el siguiente fragmento de código, puede ir fuera de rango:

       ...
       if(temp.size() == charLength)   //ok!  temp.size() is same as perm.size() 
       {
          for(int a = 0; a <= temp.size(); a ++)   //!!! loop will execute with a=temp.size() and stop afterwards
          {
             //Initialize perm to zero
             perm[a] = 0;                    //!!! but subscripts start with 0 and go to temp.size()-1

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea