le code suivant remplit le vecteur avec 10 valeurs en premier pour la boucle. en seconde pour la boucle, je veux que les éléments du vecteur soient imprimés . La sortie est exécutée jusqu'à la déclaration de cout avant la boucle j.
#include "stdafx.h"
#include "iostream"
#include "vector"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{ vector<int> v;
cout<<"Hello India"<<endl;
cout<<"Size of vector is: "<<v.size()<<endl;
for(int i=1;i<=10;++i)
{
v.Push_back(i);
}
cout<<"size of vector: "<<v.size()<<endl;
for(int j=10;j>0;--j)
{
cout<<v[j];
}
return 0;
}
Quel que soit le mode d’indexation des repoussements, votre vecteur contient 10 éléments indexés à partir de 0
(0
, 1
, ..., 9
). Donc, dans votre deuxième boucle, v[j]
est invalide, lorsque j
est 10
.
Cela corrigera l'erreur:
for(int j = 9;j >= 0;--j)
{
cout << v[j];
}
En général, il est préférable de penser aux index comme étant basés sur 0
. Je vous suggère donc de remplacer également votre première boucle par ceci:
for(int i = 0;i < 10;++i)
{
v.Push_back(i);
}
De plus, pour accéder aux éléments d'un conteneur, l'approche idiomatique consiste à utiliser des itérateurs (dans ce cas: un itérateur inversé):
for (vector<int>::reverse_iterator i = v.rbegin(); i != v.rend(); ++i)
{
std::cout << *i << std::endl;
}
v
a l'élément 10
, l'index commence de 0
à 9
.
for(int j=10;j>0;--j)
{
cout<<v[j]; // v[10] out of range
}
vous devriez mettre à jour la boucle for
for(int j=9; j>=0; --j)
// ^^^^^^^^^^
{
cout<<v[j]; // out of range
}
Ou utilisez reverse iterator pour imprimer l'élément dans l'ordre inverse
for (auto ri = v.rbegin(); ri != v.rend(); ++ri)
{
std::cout << *ri << std::endl;
}
ce type d'erreur se produit généralement lorsque vous essayez d'accéder aux données via l'index dans lequel les données n'ont pas été affectées. par exemple
//assign of data in to array
for(int i=0; i<10; i++){
arr[i]=i;
}
//accessing of data through array index
for(int i=10; i>=0; i--){
cout << arr[i];
}
le code donnera une erreur (indice de vecteur en dehors des limites) parce que vous accédez à l'arr [10] qui n'a pas encore été assigné.