2017-10-08 16 views
-1

为了找到最大总和对,其中一个元件是从第二矢量阵列的一个矢量阵列和其他元件拍摄.I发现这个代码here但两个矢量阵列的组合超过限制失败时V1的大小和v2都成为100000作为输出数组大小并中止被调用。查找其总计为最大c中的所有其他组合++

#include <vector> 
#include <algorithm> 
#include <iostream> 
#include <iterator> 
typedef int T; 
struct Fctor 
{ 
    typedef std::vector<T>::iterator Iterator; 
    Iterator it1, it2, begin, end; 
    Fctor(Iterator begin1, Iterator end1, Iterator begin2) 
    { 
     begin = begin1; 
     end = end1; 
     it1 = begin1; 
     it2 = begin2; 
    } 
    T operator()() 
    { 
     // T result = f(*it1, *it2); 
     T result = (*it1) * (*it2); 
     if(++it1 != end) return result; 
     it1 = begin; 
     ++it2; 
     return result; 
    } 
}; 

int main() 
{ 
    std::vector<T> v1; v1.push_back(1); v1.push_back(2); 
    std::vector<T> v2; v2.push_back(3); v2.push_back(4); v2.push_back(5); 
    std::vector<T> result(v1.size() * v2.size()); 
    Fctor fctor(v2.begin(), v2.end(), v1.begin()); 
    generate(result.begin(), result.end(), fctor); 
    std::copy(result.begin(), result.end(), 
     std::ostream_iterator<T>(std::cout, " ")); 
    std::cout << std::endl; 
    // => 3 4 5 6 8 10 
} 
+0

我有一些坏消息。看起来你的键盘坏了,'TAB'键不能可靠工作。由于缺乏逻辑缩进,所显示的代码大部分是不可读的。你应该让你的键盘所取代,并用清晰,逻辑缩进重写代码,让其他人实际上可以读取它。 –

+0

不是答案只是每个矢量的最大元素?您不需要生成所有可能的配对。 – Blastfurnace

+0

有一种方法,以检查这两个矢量的全部组合,在不到O(N^2)时间(任何内置函数左右。) – shashank

回答

0

最大总和对就是每个向量的最大值之和。您不需要生成所有组合或临时向量。这是一个使用标准库算法的非常简单的O(n)实现。

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

int main() 
{ 
    std::vector<int> v1{ 1,2 }; 
    std::vector<int> v2{ 3,4,5 }; 

    int max1 = *std::max_element(v1.begin(), v1.end()); 
    int max2 = *std::max_element(v2.begin(), v2.end()); 

    std::cout << "max sum = " << (max1 + max2) << '\n'; 
} 

// max sum = 7 
相关问题