Allocation de vecteurs d'armement de taille flexible - vraie en général ou est-ce une propriété de Rcpp ?

StackOverflow https://stackoverflow.com//questions/23044537

  •  21-12-2019
  •  | 
  •  

Question

J'utilise le package Rcpp pour écrire un code dont la proportion principale est écrite en C++ et la plus petite proportion en R.

D'après ce que je sais du C++, contrairement à R, toutes les variables en C++ doivent être déclarées à l'avance et cette déclaration inclut à la fois le type et la taille.Par exemple quand on dit :

arma::vec test(2);

alors je suppose que test est un vecteur tatou de taille 2, ce qui signifie que nous ne devrions rien attribuer de taille différente à tester.Est-ce correct?

Voici mon défi :

Dans mon code, j'ai une boucle qui attribue des vecteurs de taille différente (généralement supérieure à 2) au "vecteur de test" sans redéclaration de test .A ma grande surprise, le code fonctionne parfaitement sans aucune erreur de compilation !

À chaque itération, voici comment j'attribue un nouveau vecteur à tester :

test = Rcpp::as<arma::vec>(myList["aVecFromMyList"]);

Question:

Est-ce une fonctionnalité d'Armadillo que nous pouvons attribuer à des vecteurs de différentes longueurs pour tester et qui est initialement déclarée comme étant de taille 2 ?ou c'est une fonctionnalité du package Rcpp ?

Merci beaucoup pour votre aide.

Était-ce utile?

La solution

Vous demandez que la taille du vecteur soit codée dans le taper.Lorsque vous spécifiez que quelque chose est de type arma::vec, vous lui permettez d'accepter arma::vecs de n’importe quelle taille.

Si vous souhaitez imposer une contrainte de taille dans le type, vous voulez quelque chose comme arma::vec::fixed<N>, où dans ton cas N serait 2.C'est un type qui impose la contrainte selon laquelle les vecteurs doivent être de taille N.Il existe également des typedefs pour les versions à bas chiffres, par ex. vec2 comme vecteur fixe de taille 2.

Il faudrait modifier votre as appelez de la même manière, je crois - j'espère que cela fonctionne, je ne l'ai pas testé.

Tu devrais lire le Documents sur le tatou;les documents Armadillo sont probablement parmi les plus propres et les plus utiles.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top