2010-11-28 18 views

Répondre

4

Une solution simple consiste à mettre en œuvre operator[] il "pèle" que la première dimension:

#include <cstdlib> 

class MyClass 
{ 
    std::vector<std::vector<int> > foo; 

public: 

    // grant write access 
    std::vector<int>& operator[](size_t index) 
    { 
     return foo[index]; 
    } 

    // grant read access 
    const std::vector<int>& operator[](size_t index) const 
    { 
     return foo[index]; 
    } 
}; 

Vous devez le two overloads en raison de const correctness. (Si vous voulez seulement accorder un accès en lecture, pas en écriture, vous n'avez pas besoin de la version non-const, bien sûr.)

+0

+1 bonne réponse et const exactitude. – SingleNegationElimination

+0

Je l'ai essayé, mais j'ai seulement: matrix.cpp: 29: erreur: 'std :: vecteur > & opérateur [] (taille_t)' doit être une fonction membre non statique matrix.cpp : 33: erreur: fonction non membre 'const std :: vecteur > & opérateur [] (taille_t)' ne peut pas avoir le qualificateur cv matrix.cpp: 33: erreur: 'const std: : vector > & operator [] (size_t) 'doit être une fonction membre non statique – multiholle

+0

@multiholle: le code de Fred est correct - vous devez l'avoir mal intégré. Si vous ne pouvez pas déterminer où votre erreur est, envoyez plus de votre nouveau code ou copiez-collez Fred et travaillez en arrière pour ajouter votre propre fonctionnalité, en vérifiant périodiquement que vous n'avez rien cassé et en économisant si tout est bon ... . –

2

Vous pouvez surcharger operator[] pour cela. Vous voudrez peut-être regarder this faq pour obtenir des conseils pour utiliser operator() à la place.