C++ Array vergrößern

whasabi

Cadet 3rd Year
Registriert
Dez. 2013
Beiträge
42
Hallo :)

Ich hab mal ne Frage

ich will nen Array erstellen der wieder aus einem Array besteht und da mehrere Werte einfügen
also so ca

ar[anzahl][10];

wenn jetzt aber bei ar[2] zb alle 10 felder voll sind... kann ich dann iwie diesen einen array vergrößern? also die werte wo dazwischenspeichern und nur das ar[2] vl auf [20] vergrößern?
geht das iwie so? oder anders?

Danke!
 
Wenn der Wert "anzahl" fix ist würde ich ein Array aus vectoren nehmen. Ansonsten halt einen vector von vectoren.
 
nur muss ich danach die werte darin sortieren .. geht das bei einem vector?
 
ansonsten musst du ein neues, vergrößertes array anlegen und alle werte umkopieren;
 
haben noch nie etwas mit vector gemacht also muss ichs mir erst anschauen aber danke :)
 
Wenn du nur einen neuen Wert in den vector einfügen musst würde ich lieber selbst nach der richtigen Position suchen und den Wert dann dort einfügen.
 
wie kann ich das dann genau realisieren?
ich denke ich muss ein struct mit den vectoren machen oder?


Code:
struct Vektor{
int *values;
Vektor(): new vector<int> values{}
}

und in einer Methode erstelle ich den Array so:
Code:
tmp = new Vektor[10];

stimmt das? oder wie wäre es richtig?
 
http://ideone.com/pNic4A
Code:
#include <iostream>
#include <vector>

using namespace std;

int main() {
	vector<int> values = {1, 2, 3, 4, 5};
	for(auto v: values) {
		cout << v << endl;
	}
	return 0;
}

[edit] für dein Problem wirst Du wohl 2 geschachtelte vector's brauchen: vector<vector<int>>
 
Zuletzt bearbeitet:
Aber der array hat eine fix vorgegebene größe deswegen wären zwei doch schlecht oder?
 
Wenn das Array immer genau 10 Einträge hat, dann würde ich std::vector und std::array kombinieren:

Code:
std::vector<std::array<int, 10>> values;

std::array ist im Grunde das Gleiche wie ein C-Array (hat z.B. die gleiche Performance), allerdings kannst du die ganze "Macht" der STL damit nutzen, z.B. Iteratoren und Algorithmen.
 
ok ich probiers mal damit..
wie kann ich denn darauf zugreifen wenn ich jz was einfügen will? :/
 
Zuletzt bearbeitet:
stwe schrieb:
Wenn das Array immer genau 10 Einträge hat, dann würde ich std::vector und std::array kombinieren:

Code:
std::vector<std::array<int, 10>> values;

std::array ist im Grunde das Gleiche wie ein C-Array (hat z.B. die gleiche Performance), allerdings kannst du die ganze "Macht" der STL damit nutzen, z.B. Iteratoren und Algorithmen.

std::array statt "nackten" C-style-arrays zu nutzen, ist auf jeden Fall eine gute Idee, aber wenn ich mich nicht irre, funktionieren all die Algorithmen, die eigentlich Iteratoren erwarten, auch genau so gut mit Zeigern auf (nackte) Array-Elemente.
 
antred schrieb:
std::array statt "nackten" C-style-arrays zu nutzen, ist auf jeden Fall eine gute Idee, aber wenn ich mich nicht irre, funktionieren all die Algorithmen, die eigentlich Iteratoren erwarten, auch genau so gut mit Zeigern auf (nackte) Array-Elemente.
Jo, ich glaube man kann auch einfach Zeiger nehmen. Allerdings muss man da afaik manuell immer die Größe angeben:
Code:
    std::sort(array, array+10);
während man bei std::array einfach begin() und end() benutzen kann.

whasabi schrieb:
wenn ich verwende kommen bei mir 3 Fehlermeldungen
Die std::array-Klasse gibts erst seit C++11, d.h. du musst bei deinem Compiler die C++-11 Unterstützung aktivieren. Bei g++ geht das mit dem "-std=c++11"-Switch, bei Visual Studio irgendwo in den Eigenschaften.
 
stwe schrieb:
Die std::array-Klasse gibts erst seit C++11, d.h. du musst bei deinem Compiler die C++-11 Unterstützung aktivieren. Bei g++ geht das mit dem "-std=c++11"-Switch, bei Visual Studio irgendwo in den Eigenschaften.

ich glaub das darf ich nicht... kann man das problem auch anders lösen? :/
 
std::array kannst Du nur dann nehmen, wenn die Array-Größe auch konstant ist. Wurde auch schon ein paarmal erwähnt.

Aber genau das willst Du doch garnicht, also musst Du doch sowieso einen vector aus vector benutzen.
Code:
std::vector<std::vector<int>> values;
 
Singleton schrieb:
std::array kannst Du nur dann nehmen, wenn die Array-Größe auch konstant ist. Wurde auch schon ein paarmal erwähnt.

Aber genau das willst Du doch garnicht, also musst Du doch sowieso einen vector aus vector benutzen.
Code:
std::vector<std::vector<int>> values;


So wie ich das verstanden habe, ist nur eine Dimension variabel. Für die konstante Dimension kann er freilich std::array verwenden. Oder zumindest könnte er, wenn sein Compiler den C++11-Standard unterstützen würde.

@OP: Du hast aber schon den <array> Header inkludiert, oder?
 
Zurück
Oben