2016-12-02 2 views
-2

Во-первых, я новичок в C++ и очень привык работать в MatLAB. Мой код, вероятно, захочет заставить опытных пользователей C++ стрелять мне в лицо, но это выглядит так:Доступ к вектору за пределами цикла if в C++

EDIT: Я сильно отредактировал фрагмент кода. Ниже приведен очищенный, обобщенный пример того, что я пытаюсь выполнить.

int main() 
{ 


int t = 0; 
vector<int> Pad_Ref_Vec; //initialize vector. Required size unknown 


    for (int n = 0; n <= 10; n++) 
    { 

      if (t == 0) 
      { 
       vector<int> Pad_Ref_Vec(100); //at this point in the code, i know the size i need this vector to be 

       for (int i = 0; i < 100; i++) 
       { 
        Pad_Ref_Vec[i] = i;   
       } 

      } 
      else 
      { 

      //do some operation using the values of Pad_Ref_Vec created in the above 
      //if statement 

      } 

    t++; 

    } 

    return 0; 
} 

Если я сделаю это, вектор Pad_Ref_Vec ​​не читает [0 1 2 3 4 5 ... ...] после того, если заявление, но возвращается к своей прежней форме (после первой инициализации до петля for), которая является только вектором размера 0

Мне трудно поверить, что что-то настолько простое, оказывается, такая хлопот. Заранее благодарим за любые конструктивные советы.

+0

Подсказка: векторы могут быть скопированы и повторно инициализированы из копии. –

+0

Короче говоря, я хочу использовать элементы вектора, который я создаю в цикле if (если t == 0)) в каждом последующем цикле (если t> 0)). Я пытаюсь автокорректировать профиль интенсивности (линии по изображению) каждого t> 0 кадра с первым t == 0 кадром, чтобы отслеживать движение объекта. У меня очень хорошо разработан скрипт Matlab для этого, который мы используем в моей лаборатории, но я переписываю его для приложения реального времени с использованием openCV. –

+0

Ты болтливый человек. Сосредоточьтесь на важных и важных вещах. –

ответ

1

Несколько вещей здесь.

Самое важное, это срок жизни того, что вы заявляете. Если вы объявите вектор внутри {}, он не будет доступен за его пределами. Поэтому, если вы хотите использовать свой вектор за пределами if, если if (t == 0), вы должны объявить его за пределами if, иначе он больше не будет существовать, когда вы хотите получить к нему доступ.

Вы можете объявить его за пределами if и просто инициализировать его, если хотите, с помощью if. Или если вы просто хотите, чтобы добавить элементы, не зная размер, используйте push_back

Вектор класса имеет много функций Usefull, чтобы поможет вам в этой ситуации: http://en.cppreference.com/w/cpp/container/vector (изменены с cplusplus.com следующих комментариев)

+0

Спасибо. Я читал в векторном классе. Я знаю, что мне не хватает чего-то фундаментального. Поэтому, если я объявляю его перед циклом if (t == 0), тогда создайте его внутри цикла if (t == 0), могу ли я использовать его после завершения цикла if? В чем разница между объявлением и инициализацией вектора? Мне кажется, что объявление его автоматически инициализировало его до нуля, а это означало, что он будет просто нулевым в течение следующего цикла. –

+0

Я бы рекомендовал использовать [cppreference] (http://en.cppreference.com/w/cpp/container/vector/vector) как ссылку на C++. Это более надежно, чем cplusplus.com. –

+1

@OliverKress 1-й из всех 'if' не составляет _loop_. –

Смежные вопросы