2015-08-10 6 views
-12
std::vector<float> a {-0.2, 2.0, -0.9, 2.4, 22.0} 

Как принять абсолютное значение всех элементов вектора?Как вычислить абсолютное значение вектора?

+2

Петли по всем элементам, называют 'abs' на них? – anderas

+2

Попробуйте использовать google: вверху списка - http://math.stackexchange.com/questions/707945/how-to-find-the-absolute-value-of-a-vector – PaulF

ответ

6

этот код поможет вам, цикл вектора и применять ABS (функцию, чтобы найти абсолютное значение)

for(unsigned int i = 0; i < numbers.size(); i++) 
    { 
     if(numbers[i] < 0)numbers[i] *= -1; //make positive. _OR_ use numbers[i] = abs(numbers[i]); 
     std::cout<<numbers[i]<<std::endl; 
    } 
+2

или с диапазоном C++ 11: 'for (auto & f: numbers) {f = f <0? -f: f;} ' – Jarod42

4

Use the formula |a| = sqrt(sum(ai*ai)):

float value = 0.0; 
for(int i = 0; i < a.size(); i++) value += a[i] * a[i]; 
value = sqrt(value); 
+0

Мои математические классы некогда назад , но shoudn't это будет | a | = sqrt (sum (abs (ai) * abs (aj))). В противном случае вы можете столкнуться с исключением, когда принимается sqrt отрицательного значения. (Плюс результат может быть неправильным) –

+0

Кажется, что это не то, что хочет OP. Вы вычисляете расстояние, тогда как OP хочет изменить свой вектор, чтобы иметь положительный поплавок. – Jarod42

+0

'ai * ai' =' abs (ai) * abs (ai) ', не так ли? –

1

Вы создаете функцию, которая принимает в качестве входного вектора и возвращает другой вектор:

const std::vector<float>& absValues(std::vector<float>& vecIn) 
{ 
    for(float &val : vecIn) 
    { 
     if (val < 0) 
     { 
      val *= -1; 
     } 
    } 

    return vecIn; 
} 

И если вы хотите, SQRT суммы всех элементов от вектора, то вы должны это сделать as John Bupit said (ИМХО приятно)

3

Вы можете использовать следующий код.

#include <iostream> 
#include <string> 
#include <cstring> 
#include <vector> 

using namespace std; 

void v_abs(vector <int> &x, double p[]) 
{ 
    int i=0; 


    while(p[i] < x.size()) 
    { 
     if (p[i] < 0) 
     { 
      p[i] *= -1 ; 
     } 
      i ++; 
    } 
} 

int main() { 
    cout << v_abs << endl; 
    system("pause"); 
    return 0; 
} 
+2

Это закончится бесконечным циклом, если на первом значении> = 0. Также не так, как вы находите абсолютное значение вектора. – PaulF

+0

исправлено. Спасибо, что указали. – DhruvJoshi

+0

Ваш адрес печати функции вы не называете. – Jarod42