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

Insert() z biblioteki <list>

Object Storage Arubacloud
0 głosów
190 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 548 wizyt
+1 głos
2 odpowiedzi 260 wizyt
pytanie zadane 9 kwietnia 2021 w JavaScript przez Ziom54d4 Początkujący (350 p.)
0 głosów
1 odpowiedź 458 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,959 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...