Как мне вычислить максимум двух переменных size_t - PullRequest
2 голосов
/ 19 ноября 2010

У меня есть это в моем коде.

vector<unsigned int> import;
vector<unsigned int> aquired;
. . .
size_t new_size = max(import.size(),aquired.size());

, и я получаю эту ошибку:

 error: more than one instance of
 overloaded function "max" matches the
 argument list:
             function "max(int, int)"
             function "max(unsigned int, unsigned int)"
             function "max(int, unsigned int)"
             function "max(unsigned int, int)"
             function "max(long long, long long)"
             function "max(unsigned long long, unsigned long long)"
             function "max(long long, unsigned long long)"
             function "max(unsigned long long, long long)"
             function "max(float, float)"
             function "max(double, double)"
             function "max(float, double)"
             function "max(double, float)"
             argument types are: (size_t, size_t)

Насколько я понимаю, size_t является беззнаковым целым.Так почему же это проблема и как мне ее обойти?

Компиляция с:

$gcc --version
gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3
$nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2010 NVIDIA Corporation
Built on Wed_Sep__8_17:12:45_PDT_2010
Cuda compilation tools, release 3.2, V0.2.1221

Ответы [ 4 ]

11 голосов
/ 20 ноября 2010
#include <algorithm>

size_t val1;
size_t val2;

size_t maxValue = std::max<size_t>(val1, val2);
2 голосов
/ 20 ноября 2010

Я не думаю, что size_t на самом деле unsigned int. Я подозреваю, что это его собственный тип, а не typedef - по крайней мере, в g ++

Использовать std :: max:

#include <algorithm>

int main(int argc, char **argv)
{
  size_t a = 2, b=3;
  std::max(a,b);
  return 0;
}
2 голосов
/ 20 ноября 2010

size_t не обязательно без знака int, это зависит от платформы. Если вы компилируете для 32-битной версии или знаете, что ваш вектор будет иметь размер менее 4 миллиардов, вы можете смело приводить к unsigned int Некоторые 64-битные платформы используют 64-битный size_t, но имеют беззнаковое целое как только 32-битное.
Попробуйте использовать это вместо вашего текущего кода:

size_t new_size = max((unsigned int)import.size(),(unsigned int)aquired.size());

0 голосов
/ 20 ноября 2010

Попробуйте это:

std::max((unsigned int)import.size(), (unsigned int)aquired.size());
...