J'ai un 2 dimensions std::array
de std::array
s et je veux le remplir avec 0s. La seule solution à ce que j'ai trouvé est d'utiliser un pointeur vers le premier élément et sizeof
, comme ceci:Quelle est la méthode STL pour remplir un tableau bidimensionnel std :: sans itération?
std::fill(&arr2d[0][0], &arr2d[0][0] + sizeof(arr2d), 0);
Bien qu'il fonctionne, il ne correspond pas avec d'autres méthodes que j'ai trouvé pour le remplissage 1D std::array
s sans logique de pointeur, comme les deux suivantes:
std::fill(arr1d.begin(), arr1d.end(), 0);
arr1d.fill(0);
Je pourrais itérer sur chaque tableau, comme suit:
for (auto& it : arr2d) {
it.fill(0);
}
mais il semble que ce serait beaucoup plus mo re efficace pour remplir le tableau en un seul passage. Y at-il une méthode plus propre pour les tableaux 2D, ou suis-je coincé avec la logique du pointeur de style C?
Pourquoi vous en assumerez 'std :: fill' ne roulera pas une boucle similaire. Si vous souhaitez remplir avec 0, alors 'std :: memset' pourrait être utilisé. – DeiDei
@DeiDei Un de mes objectifs pour ma programmation en C++ est d'éviter la logique de type C comme 'memset'. Je ne suppose pas que 'std :: fill' ou' std :: memset' va ou ne lancera pas une boucle comme mon exemple. Je crois que les rédacteurs de mise en œuvre sont de meilleurs programmeurs que moi et ont fait des optimisations au besoin. – robbie0630
1. Quel est le type d'élément de tableau? 2. remplir avec 0 ou avec une valeur arbitraire? –