En supposant que size_of_array < n
pour itérer plusieurs fois dans les éléments d'un tableau, j'utiliserais normalement quelque chose comme (en C++) :
for (size_t i = 0; i < n; ++i)
{
elem = arr[ i % size_of_arr ];
}
Si arr = {1, 2, 3};
pour elem
J'aurais :
1 2 3 1 2 3 ...
Cependant, dans MATLAB / Octave, les index commencent à partir de 1
et :
for i = 1 : n
elem = arr( mod( i, length(arr) + 1) );
end
alors quand n == length(arr)
Je reçois une erreur :
error : arr(0) : les souscripteurs doivent être soit des entiers de 1 à (2^31)-1, soit des logiques.
Comment cela se fait-il lorsque les index commencent à partir de 1 ?
2 votes
La forme idiomatique pour cela est
mod(i-1,n)+1
(Je l'appelle Module de base 1 ). Ainsi, peut-êtreelem = arr(mod(i-1, length(arr))+1);
fonctionne pour vous (je ne suis pas sûr de ce que vous essayez d'obtenir)2 votes
Ne jamais utiliser
length
il renvoie la longueur de la dimension la plus longue. Au lieu de cela, utiliseznumel
(nombre d'éléments).0 votes
error: arr(0):
Le zéro est ce sur quoi Matlab essaie de vous engueuler.0 votes
@LuisMendo Merci pour ce commentaire utile, cela a parfaitement fonctionné. Si vous êtes intéressé par l'utilisation, consultez : codereview.stackexchange.com/questions/174876/