Как правильно определить целочисленный вектор, содержащий научные обозначения в C++?

Код

#include <iostream>
#include <vector>

int main () { std::vector<int> N = {3e6, 4e6}; }

Выдает ошибку

error: narrowing conversion of ‘3.0e+6’ from ‘double’ to ‘int’ inside { } [-Wnarrowing]|||.

В то время как

#include <iostream>
#include <vector>

int main () {
   std::vector<int> N = {3*10^6, 4*10^6};
   for (int n: N ){ std::cout << n << std::endl; }
}

печать

24
46.

Как правильно определить этот вектор как целочисленный вектор?

Если нашли при написании этого вопроса этот параметр

int n1 = 3e6, n2 = 4e6;
vector<int> N = {n1, n2};

работает, но есть ли лучший способ? Тип по-прежнему преобразуется из double в int в объявлениях n1 и n2.

1 ответ

Если вы настаиваете на использовании этой записи, вы можете выполнить явное приведение, чтобы выключить компилятор, но это не очень хорошая идея:

#include <iostream>
#include <vector>

int main () { std::vector<int> N = {int(3e6), int(4e6)}; }
Другие вопросы по тегам