C/C++: вектор нативного массива, как заменить элемент?

Рейтинг: 0Ответов: 1Опубликовано: 13.07.2023
colors = new std::vector<uint8_t[3]>(5);

for(int i=0; i<5; i++){
    uint8_t rgb[3] = {(uint8_t)i, (uint8_t)i+16, (uint8_t)i+32};
    colors[i] = rgb;
}

Ошибка: No viable overloaded '=' ? Не понимаю в чем тут проблема и как это надо делать в С++

Ответы

▲ 1

Ошибка первая :

colors[i] = rgb;

привело бы к ошибке памяти, так как colors имеет тип указателя на вектор, а i-го вектора у вас просто нет.

Правильно так :

( * colors ) [ i ] = rgb ;

Вторая ошибка в том-что у типа массива нет оператора присваивания.

Есть возможность исправить эту проблему, обернув массив в структуру.

# include <vector>
# include <cstdint>

struct  sRGB  {
  uint8_t a [ 3 ] ;
} ;

int main(){
  std::vector<sRGB>*colors = new std::vector<sRGB>(5);

  for(int i=0; i<5; i++){
    sRGB rgb = sRGB { { (uint8_t)i, (uint8_t)i+16, (uint8_t)i+32 } } ;
    ( * colors ) [ i ] = rgb ;
 }
}