جمع نظیر به نظیر 2 وکتور - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

جمع نظیر به نظیر 2 وکتور

+1 امتیاز

سلام. اگر ما 2 بردار هم اندازه داشته باشیم آیا راهی وجود داره که بوسیله آن به صورت بهینه عملیات ریاضی را بر روی این 2 بردار به صورت نظیر به نظیر اعمال کنیم.

vector<int> a(10);
vector<int> b(10);
vector<int> c;
c = a + b;

 

سوال شده خرداد 28, 1393  بوسیله ی RED (امتیاز 494)   9 30 41
دوباره تگ گذاری شد خرداد 28, 1393 بوسیله ی BlueBlade

2 پاسخ

+1 امتیاز
 
بهترین پاسخ

در همچین مواردی می تونید از std::valarray استفاده کنید. به صورت زیر :

#include <valarray>
int main(){
	std::valarray<int> a = { 1, 2, 3 };
	std::valarray<int> b = { 10, 20, 30 };
	auto c = a + b;

	for (auto& item : c)
		cout << item << endl;
}

 

 

پاسخ داده شده خرداد 28, 1393 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
انتخاب شد دی 6, 1393 بوسیله ی BlueBlade
+1 امتیاز

میتونین از std::transform  به همراه std::plus استفاده کنین  : 

OutputIterator transform (InputIterator1 first1, InputIterator1 last1,
                            InputIterator2 first2, OutputIterator result,
                            BinaryOperation binary_op);

مثال : 

#include <iostream>
#include <vector>
#include <algorithm>

int main()
{
    std::vector<int> items1(10);
    std::iota(items1.begin(),items1.end(),0);//fill with numbers from 1 to 50
    std::random_shuffle(items1.begin(), items1.end());//taviz mahal item ha be soorat random
    for(auto& i:items1){
        std::cout<<i<<"   ";
    }
    std::vector<int> items2(10);
    std::iota(items2.begin(),items2.end(),0);
    std::random_shuffle(items2.begin(), items2.end());
    std::cout<<'\n';
    for(auto& i:items2){
        std::cout<<i<<"   ";
    }

    std::vector<int> result(10);
    std::transform(items1.begin(), items1.end(), items2.begin(),
                   result.begin(), std::plus<int>());

    std::cout<<'\n';
    for(auto& i:result){
        std::cout<<i<<"   ";
    }
}

اجرای زنده .

پاسخ داده شده خرداد 28, 1393 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
...