Остановка цикла for C++

Следующий код должен выводить [0, 1], если следовать следующему условию: введите сюда описание изображения Именно для этого во втором цикле for указан break, чтобы избежать нахождения следующих индексов, но почему-то код выводит и [0, 1] и [1, 0]. Задание прикреплено снизу.

int main() {
    std::cout << "Enter size:" << std::endl; int size; std::cin >> size;
    int* nums = new int[size];

    std::cout << "Enter el-s:" << std::endl;
    for (int i{ 0 }; i < size; i++)
    {
        std::cin >> nums[i];
    };

    std::cout << "Enter target:" << std::endl; int target; std::cin >> target;

    for (int i{ 0 }; i < size; i++)
    {
        for (int j{ 0 }; j < size; j++)
        {
            if (nums[i] + nums[j] == target)
            {
                std::cout << "[" << i << ", " << j << "]" << std::endl;
                break;
            }
        }
    }

    delete[] nums;
}

(Задание сделано неправильно с точки зрения решения на литкоде, но вопрос в другом) введите сюда описание изображения


Ответы (4 шт):

Автор решения: Qwertiy

break выходит только из самой вложенной конструкции. Чтобы прервать внешний цикл используй goto:

for (int i ...)
  for (int j ...)
    if (...)
      goto DONE;

DONE:
...

Кстати, иногда бывает полезно обернуть метку в if (false):

if (0)
{
   DONE:
   ...
}
→ Ссылка
Автор решения: NunOfIt
bool key;
for(...) {
    for(...)
        if(...) {
            ...
            key = true;
            break;
        }
    if (key) break;
}
→ Ссылка
Автор решения: Harry

Не столько для применения, сколько для полноты коллекции :)

try {
    for (int i ...)
        for (int j ...)
            if (...) throw что-то
} catch(что-то)
{}
→ Ссылка
Автор решения: CrazyElf

А мне нравится вариант с выносом такого кода в отдельную функцию, тогда можно просто return из функции сделать:

void iterate(int* nums, int size, int target)
{
    for (int i{ 0 }; i < size; i++)
    {
        for (int j{ 0 }; j < size; j++)
        {
            if (nums[i] + nums[j] == target)
            {
                std::cout << "[" << i << ", " << j << "]" << std::endl;
                return;
            }
        }
    }
}
→ Ссылка