2017-01-17 17 views
5

Tôi đang làm việc với thư viện Armadillo trong C++. Lúc đầu, tôi tính toán một ma trận đặc biệt (trong mã của tôi: P), sau đó tôi tính toán phân tích QR (trong mã của tôi: Q). Cuối cùng tôi cần trả về cả P ​​và Q và một ma trận T khác cho hàm chính của tôi.trả về nhiều ma trận trong c + + (thư viện Armadillo)

#include <iostream> 
#include <armadillo> 
using namespace std; 
using namespace arma; 
double phi(int n, int q){ 
... 
    mat P(n,n); 
    P=... 
    mat Q,R; 
    qr(Q,R,P); 
return P: 
return Q; 
return Q; 
... 
} 

int main() { 
    ... 
    int n,q; 
    cout<<"Enter the value of parameters n and q respectively:"<<endl; 
    cin>> n>>q; 
    phi(n,q); 
... 
} 

Tôi đang tìm kiếm một phương pháp để trả lại các ma trận trong armadillo với bằng cách sử dụng con trỏ và references.Here ma trận của tôi là rất lớn và thường là 500 * 500 hoặc 1000 * 1000. Có ai có giải pháp? Cảm ơn trước

+1

Tại sao không thay đổi chữ ký của phi để bao gồm hai con trỏ đến P và Q và vượt qua chúng từ chính? – 16tons

+0

Tôi muốn sử dụng chức năng phi trong RCPP. Tôi không chắc nó hoạt động đúng ở đó. Nếu tôi không thể tìm thấy một giải pháp khác, tôi phải sử dụng con trỏ. – Ham82

+0

Bạn có thể sử dụng 'std :: tuple' cùng với' std :: tie', xem http://en.cppreference.com/w/cpp/utility/tuple – Jonas

Trả lời

7

Dưới đây là một ví dụ sử dụng std::tuple cùng với std::tie

#include <iostream> 
#include <armadillo> 

using namespace arma; 

std::tuple<mat, mat> phi(int const n, int const q) 
{ 
    ... 
    mat P(n, n); 
    P = ... 
    mat Q, R; 
    qr(Q, R, P); 
    return std::make_tuple(P, Q); 
} 

int main() 
{ 
    ... 
    int n, q; 
    std::cout << "Enter the value of parameters n and q respectively:" << std::endl; 
    std::cin >> n >> q; 
    mat P, Q; 
    std::tie(P, Q) = phi(n,q); 
    ... 
} 

Với C++ 17 (và một tuyên bố structured binding), bạn có thể làm điều đó như thế này:

#include <iostream> 
#include <armadillo> 

using namespace arma; 

std::tuple<mat, mat> phi(int const n, int const q) 
{ 
    ... 
    mat P(n, n); 
    P = ... 
    mat Q, R; 
    qr(Q, R, P); 
    return {P, Q}; 
} 

int main() 
{ 
    ... 
    int n,q; 
    std::cout << "Enter the value of parameters n and q respectively:" << std::endl; 
    std::cin >> n >> q; 
    auto [P, Q] = phi(n,q); 
    ... 
} 
+0

Cảm ơn rất nhiều, nó hoạt động đúng. – Ham82

Các vấn đề liên quan