Const verweist auf std :: vector Elemente

7

Ist es nur mein Compiler oder ist es verboten, Cons-Referenzen in std :: vector-Elementen zu verwenden? Betrachten Sie folgende Struktur:

%Vor%

Wenn ich nun versuche, ein solches Objekt auf den Vektor zu schieben:

%Vor%

Ich erhalte einen Compilerfehler: "Fehler: nicht-statisches Referenzglied 'const int & amp; Y :: x', kann den Standardzuweisungsoperator nicht verwenden". Sollte nicht genug davon kopiert werden?

    
doc 10.05.2012, 09:20
quelle

6 Antworten

19

Die Elemente vector müssen zuweisbar sein. Aus Abschnitt 23.2.4 Klassenvorlagenvektor des C ++ - Standards:

  

... das gespeicherte Objekt muss die Anforderungen von Assignable erfüllen.

    
hmjd 10.05.2012, 09:25
quelle
11

Vielleicht möchten Sie

überprüfen %Vor%

verfügbar mit C ++ 11

    
stefan bachert 10.05.2012 09:26
quelle
4

Nein, weil Sie einer const-Referenz nicht zuweisen können und die STL-Container die Zuweisung zum Verschieben von Elementen verwenden.

Sie verwenden besser eine shared_ptr ( boost:: oder std:: abhängig von Ihrer Umgebung) oder einen rohen Zeiger.

    
Nick 10.05.2012 09:22
quelle
1
___ qstntxt ___

Ist es nur mein Compiler oder ist es verboten, Cons-Referenzen in std :: vector-Elementen zu verwenden? Betrachten Sie folgende Struktur:

%Vor%

Wenn ich nun versuche, ein solches Objekt auf den Vektor zu schieben:

%Vor%

Ich erhalte einen Compilerfehler: "Fehler: nicht-statisches Referenzglied 'const int & amp; Y :: x', kann den Standardzuweisungsoperator nicht verwenden". Sollte nicht genug davon kopiert werden?

    
___ answer10531042 ___

Nein, weil Sie einer const-Referenz nicht zuweisen können und die STL-Container die Zuweisung zum Verschieben von Elementen verwenden.

Sie verwenden besser eine vector ( %code% oder %code% abhängig von Ihrer Umgebung) oder einen rohen Zeiger.

    
___ answer10531097 ___

Vielleicht möchten Sie

überprüfen %Vor%

verfügbar mit C ++ 11

    
___ answer43265526 ​​___

Ich benutze schließlich

%Vor%

Ein bisschen nicht gut aussehend, aber machen Sie den gleichen Job.

    
___ answer10531049 ___

Es ist generell verboten, Referenzen in irgendeinem Container zu verwenden. Sie können dies dadurch rechtfertigen, dass ein Vektor zum Beispiel die Daten im Vorhinein zuweist und Referenzen nur einmal vergeben werden (während der Initialisierung).

    
___ antwort10531045 ___

Ein Zuweisungsoperator ist notwendig, weil %code% default Elemente in zusätzlichen Slots vor der Zeit erstellt.

Später, anstatt es neu zuzuweisen, verwendet es den Zuweisungsoperator, um diese Standardinstanzen dem zuzuordnen, was Sie in den Vektor schieben.

    
___ qstnhdr ___ Const verweist auf std :: vector Elemente ___ tag123stl ___ Die Standardvorlagenbibliothek (STL) ist eine C ++ - Bibliothek mit generischen Containern, Iteratoren, Algorithmen und Funktionsobjekten. Als C ++ standardisiert wurde, wurden große Teile der STL in die Standardbibliothek übernommen, und diese Teile in der Standardbibliothek werden manchmal auch zusammen als "die STL" bezeichnet. ___ tag123reference ___ Eine Referenz ist ein Wert, der es einem Programm ermöglicht, indirekt auf ein bestimmtes Datum wie eine Variable oder einen Datensatz im Computerspeicher oder in einem anderen Speichergerät zuzugreifen. ___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ tag123vector ___ Ein Vektor ist ein eindimensionales Array: Er enthält Komponenten, auf die mit einem ganzzahligen Index zugegriffen werden kann. In einigen Sprachen kann die Größe eines Vektors nach Bedarf vergrößert oder verkleinert werden, um Elemente hinzuzufügen und zu entfernen, nachdem der Vektor erstellt wurde. Verwenden Sie "Vektorgrafiken" für die grafische Darstellung. ___ tag123const ___ Const ist ein Qualifikationsmerkmal, das zum Definieren eines Datenspeicherbereichs (Objekt, Feld, Variable, Parameter) verwendet wird, der sich "nie ändert", wodurch zusätzliche Codegeneratoroptimierungen und zusätzliche statische Überprüfung der Programmkorrektheit ermöglicht werden. ___ answer10531067 ___

Die Elemente %code% müssen zuweisbar sein. Aus Abschnitt 23.2.4 Klassenvorlagenvektor des C ++ - Standards:

  

... das gespeicherte Objekt muss die Anforderungen von Assignable erfüllen.

    
___
Corbin 10.05.2012 09:23
quelle
0

Es ist generell verboten, Referenzen in irgendeinem Container zu verwenden. Sie können dies dadurch rechtfertigen, dass ein Vektor zum Beispiel die Daten im Vorhinein zuweist und Referenzen nur einmal vergeben werden (während der Initialisierung).

    
Nobody 10.05.2012 09:23
quelle
-1
___ qstntxt ___

Ist es nur mein Compiler oder ist es verboten, Cons-Referenzen in std :: vector-Elementen zu verwenden? Betrachten Sie folgende Struktur:

%Vor%

Wenn ich nun versuche, ein solches Objekt auf den Vektor zu schieben:

%Vor%

Ich erhalte einen Compilerfehler: "Fehler: nicht-statisches Referenzglied 'const int & amp; Y :: x', kann den Standardzuweisungsoperator nicht verwenden". Sollte nicht genug davon kopiert werden?

    
___ answer10531042 ___

Nein, weil Sie einer const-Referenz nicht zuweisen können und die STL-Container die Zuweisung zum Verschieben von Elementen verwenden.

Sie verwenden besser eine %code% ( %code% oder %code% abhängig von Ihrer Umgebung) oder einen rohen Zeiger.

    
___ answer10531097 ___

Vielleicht möchten Sie

überprüfen %Vor%

verfügbar mit C ++ 11

    
___ answer43265526 ​​___

Ich benutze schließlich

%Vor%

Ein bisschen nicht gut aussehend, aber machen Sie den gleichen Job.

    
___ answer10531049 ___

Es ist generell verboten, Referenzen in irgendeinem Container zu verwenden. Sie können dies dadurch rechtfertigen, dass ein Vektor zum Beispiel die Daten im Vorhinein zuweist und Referenzen nur einmal vergeben werden (während der Initialisierung).

    
___ antwort10531045 ___

Ein Zuweisungsoperator ist notwendig, weil %code% default Elemente in zusätzlichen Slots vor der Zeit erstellt.

Später, anstatt es neu zuzuweisen, verwendet es den Zuweisungsoperator, um diese Standardinstanzen dem zuzuordnen, was Sie in den Vektor schieben.

    
___ qstnhdr ___ Const verweist auf std :: vector Elemente ___ tag123stl ___ Die Standardvorlagenbibliothek (STL) ist eine C ++ - Bibliothek mit generischen Containern, Iteratoren, Algorithmen und Funktionsobjekten. Als C ++ standardisiert wurde, wurden große Teile der STL in die Standardbibliothek übernommen, und diese Teile in der Standardbibliothek werden manchmal auch zusammen als "die STL" bezeichnet. ___ tag123reference ___ Eine Referenz ist ein Wert, der es einem Programm ermöglicht, indirekt auf ein bestimmtes Datum wie eine Variable oder einen Datensatz im Computerspeicher oder in einem anderen Speichergerät zuzugreifen. ___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ tag123vector ___ Ein Vektor ist ein eindimensionales Array: Er enthält Komponenten, auf die mit einem ganzzahligen Index zugegriffen werden kann. In einigen Sprachen kann die Größe eines Vektors nach Bedarf vergrößert oder verkleinert werden, um Elemente hinzuzufügen und zu entfernen, nachdem der Vektor erstellt wurde. Verwenden Sie "Vektorgrafiken" für die grafische Darstellung. ___ tag123const ___ Const ist ein Qualifikationsmerkmal, das zum Definieren eines Datenspeicherbereichs (Objekt, Feld, Variable, Parameter) verwendet wird, der sich "nie ändert", wodurch zusätzliche Codegeneratoroptimierungen und zusätzliche statische Überprüfung der Programmkorrektheit ermöglicht werden. ___ answer10531067 ___

Die Elemente %code% müssen zuweisbar sein. Aus Abschnitt 23.2.4 Klassenvorlagenvektor des C ++ - Standards:

  

... das gespeicherte Objekt muss die Anforderungen von Assignable erfüllen.

    
___
wa56 06.04.2017 20:51
quelle

Tags und Links