Wpis z mikrobloga

Jeżeli mam tablicę A n-pustych list i wrzucam do niej elementy (na różne miejsca) to czy istnieje taka funkcja, którą mogę wypisać tylko te elementy, które mają jakieś wartości na listach?
#programowanie #cpp #noob

Taki kod:

for(i = 0; i < n; i++)
{
for(list::iterator it = A[i].begin(); it != A[i].end(); it++)
if (it != NULL) then { //można coś takiego zrobić?
cout << " " << " 0";
}
else {
cout << " " << * it;
}
cout << endl;
}
  • 53
@mmhl: @wonsz_smieszek: a wiecie może czy da się zrobić jakimś mykiem sortowanie takich list po pierwszym elemencie?

Mam A takie:
A[0]: 1 0 3
A[1]: 0 2 0
A[2]: empty
A[3]: 3 0 1

i chciałbym:

A[0]: empty (albo najlepiej je wypieprzyć)
A[1]: 0 2 0
A[2]: 1 0 3
A[3]: 3 0 1
@chilling: standardowa funkcja sort jako ostatni argument przyjmuje funkcję porównującą dwa elementy.

czyli możesz napisać własną funkcję, która porówna dwa elementy tablicy na podstawie pierwszej liczby na liście zawartej w elemencie. taka funkcja powinna przyjmować dwa argumenty i zwracać bool (0 lub 1) w zależności od tego, który z argumentów jest większy

jak już masz funkcję, która potrafi porównać takie dwa elementy, to możesz jej użyć jako argumentu w sorcie

Przykład
@wonsz_smieszek: @mmhl: @sylwke3100: chłopaki jeszcze jedno pytanie. Mam taki kod:

list * A;
A = new list [n];
for(i = 0; i < n; i++)
{
cin >> v1 >> v2 >> v3;
//A[v1].push_back(v3);
}

I nie wiem dlaczego, ale dla danych, gdy pierwszy wiersz ma końcówkę zero, np. 1 0 0 (n=1) wywala mi program (kompilator o nic się nie rzuca). Nie można wrzucać do listy A[0] zera
@chilling: Na takie coś wpadłem choć nie wiem czy tam czasem UB nie będzie

int n = 2;
        
int v1, v2, v3;
        vector> lista(n);
        
for(int** i =0 ;i < lista.size(); i++){
                cin>>v1 >>v2 >>v3;
                lista[v1].push_back(v3);
        }
        
for (auto podlista: lista)
                
for(auto` element: podlista)
                        cout<