• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Insert() z biblioteki <list>

0 głosów
488 wizyt
pytanie zadane 31 marca 2016 w C i C++ przez Tony Początkujący (360 p.)

Mam problem odnośnie argumentów funkcji insert.
 

void insert()
{
    list<int>::iterator i=lista.begin(); i!= lista.end(); ++i;
    int liczba;
    int gdzie;
    cout<<"Jaka liczbe wstawic: ";
    cin>>liczba;
    cout<<"Gdzie ta liczbe wstawic?: ";
    ///?/////////??????///////////????///
    lista.insert( ? , liczba);

}

Chciałbym by funkcja wstawiała element w miejsce,w  które życzy sobie użytkownik. Wiem, że drugi argument to stała wartość, natomiast nie rozumiem jak wstawić argument pozycji jako stale inicjalizowany typ(tak jak liczba).                

2 odpowiedzi

+1 głos
odpowiedź 31 marca 2016 przez mariush Dyskutant (7,860 p.)
edycja 31 marca 2016 przez mariush
 
Najlepsza

lista.insert(lista.begin() + pozycja, liczba);

Edit:

list<int>::iterator it = lista.begin();
advance(it, pozycja);
lista.insert(it, liczba);

 

komentarz 31 marca 2016 przez Tony Początkujący (360 p.)
Jeśli użyję '+' to funkcja wyrzuci błąd.
komentarz 31 marca 2016 przez mariush Dyskutant (7,860 p.)

Spróbuj

list<int>::iterator it = lista.begin();
advance(it, pozycja);
lista.insert(it, liczba);

 

komentarz 31 marca 2016 przez Tony Początkujący (360 p.)
void insert()
{
    list<int>::iterator i=lista.begin(); i!= lista.end(); ++i;
    int liczba;
    int pozycja;
    cout<<"Gdzie liczbe wstawic: ";
    cin>>pozycja;
    cout<<"Jaka liczbe wstawic: ";
    cin>>liczba;
    advance(i, pozycja);
    lista.insert(i, liczba);

}

DZIAŁA! Dzięki!   Nie wiedziałem o istnieniu tego advance();

+1 głos
odpowiedź 31 marca 2016 przez fasadin Użytkownik (650 p.)

musisz uzyc preinkrementacji (w tym wypadku bedzie lepsza niz postinkrementacja). Wybacz za mieszanie polskiego z angielskim. Chcialem zrobic wszystko po polsku, ale nie wiedzialem jak nazwac funkcje po polsku tak by miala sens

​
#include <iostream>
#include <list>
using namespace std;

std::list<int>::iterator GetMovedIterator(std::list<int>& list, int number)
{
	auto iterator = list.begin();
	for(int i = 0; i < number; i++)
	{
		++iterator;
	}
	return iterator;
}

void DisplayList(std::list<int>& list)
{
	for (auto element : list)
	{
		cout << element;
	}
}

int main() 
{
	std::list<int> lista = {1,2,3,4,5};
	
	int pozycja = 3;
	int liczba = 10;
	
	DisplayList(lista);
	
	cout << "\n\n";
	
	auto iterator = GetMovedIterator(lista, pozycja);
	lista.insert(iterator, liczba);
	
	DisplayList(lista);
	
	return 0;
}
komentarz 31 marca 2016 przez Tony Początkujący (360 p.)
To jest chyba przekombinowane. Pozdrawiam.
komentarz 31 marca 2016 przez fasadin Użytkownik (650 p.)
moglem uzyc z iteratora advance, ale czy autor by zrozumial co sie dzieje dokladnie?

a po za tym, dlaczego niby przekombinowane?
komentarz 31 marca 2016 przez Tony Początkujący (360 p.)
Bo chodzi o to, że ja już prawie miałem gotową funkcję. Nie potrzebowałem main(), gdyż insert() jak i wiele innych funkcji z listy już mam w main() gotowe. Chodziło tylko o sam void.
komentarz 31 marca 2016 przez fasadin Użytkownik (650 p.)
Pokazalem Ci przyklad na ktorym miales sie wzorowac. Nie dalem Ci gotowego programu. Chyba lepiej zrozumiec jak cos dziala niz kopiowac prawda?
komentarz 4 kwietnia 2016 przez Tony Początkujący (360 p.)
Racja. Analizowanie czyichś kodów zawsze rozwija.

Podobne pytania

+2 głosów
2 odpowiedzi 1,124 wizyt
+1 głos
2 odpowiedzi 574 wizyt
pytanie zadane 9 kwietnia 2021 w JavaScript przez Ziom54d4 Początkujący (350 p.)
0 głosów
1 odpowiedź 807 wizyt

93,771 zapytań

142,731 odpowiedzi

323,383 komentarzy

63,372 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...