referencja-tablice

referencja-tablice
SS
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 4 lata
  • Postów:24
0

hey
i was learning some new things, and found a problem with reference, google didnt help :/
here is a simple function

Kopiuj
void pushtovector(string pushit, vector<string>&vct[],int indx){
    vct[indx].push_back(pushit);
}

and a function call:

Kopiuj
pushtovector(s,minxmax,siz(s));

reference error.png

what should i do to make it work? have no idea

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

those version works, so it confused me..
vector<string>vct | without table in it, with reference, works:

Kopiuj
void pushtovector(string pushit, vector<string>&vct,int indx){
    vct.push_back(pushit);
}

vector<string>vct[100] | with table in it, but with no reference, also works:

Kopiuj
void pushtovector(string pushit, vector<string>vct[],int indx){
    vct[indx].push_back(pushit);
}

but combination both of vector <string>[] and reference end up with compile error..
first post ever so it isnt that transparent :v

SS
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 4 lata
  • Postów:24
0

o shiet, zarejestrowałem się na pierwszym z brzegu otwartym forum informatycznym i nie spojrzałem że jest polskie, to po angielsku z rozpędu napisałem :D

pingwindyktator
  • Rejestracja:ponad 12 lat
  • Ostatnio:27 dni
  • Lokalizacja:Kraków
  • Postów:1055
2

http://melpon.org/wandbox/permlink/9jgAQV0DwYoXmzmV
Tak? Chociaż bardziej sugerowałbym użycie

typedef std::array<std::vector<costam>> nazwa_ktora_odzwierciedla_czym_jest_typ;


do not code, write prose
edytowany 1x, ostatnio: pingwindyktator
SS
działa dzięki, tylko nie rozumiem do końca tego :p size_t, * dlaczego nagle & nie działa, i co za magia z tym size, ? próbowałem się wczytać ale nie rozumiem różnicy między *, a &, a size_t pierwszy raz na oczy widzę :/
Pebal
  • Rejestracja:ponad 12 lat
  • Ostatnio:około rok
  • Postów:111
1

Musisz określić rozmiar tablicy:

Kopiuj
void pushtovector(string pushit, vector<string>(&vct)[100], int indx)
{
}
SS
ale ta funkcja ma działać na strukturach o różnych rozmiarach, nie zawsze 100 :/
Pebal
Więc utwórz szablon funkcji, przykład masz poniżej.
twonek
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 2 lata
  • Postów:2500
3

C++ nie pozwala na definiowanie tablicy referencji, ani referencji do referencji oraz wskaźnika do referencji.
Nie pokazałeś całości kodu ani nie opisałeś problemu, więc trudno wskazać prawidłowe rozwiązanie, ale na pewno tablica referencji to ślepy zaułek.

@strawberry shake istnieje fundamentalna różnica między Twoim pierwszym kodem a tym pokazanym przez @Pebala

Kopiuj
void pushtovector(string pushit, vector<string>(&vct)[100], int indx)

U Ciebie to tablica referencji, a tutaj to referencja do tablicy.

edytowany 1x, ostatnio: twonek
SS
nie w pełni to rozumiem, referencja do tablicy- całą tablicę traktuję jako jedną całość, jakby jedną zmienną, do której tworzę referencję, tak? a tablica referencji? tworzę nową tablicę zawierającą referencję do każdej z komórek? czyli mam tablicę zawierającą np 100 referencji do 100 zmiennych zebranych w tablicę?
twonek
Pierwsze pytanie - TAK. Drugie pytanie - NIE. Nie istnieje coś takiego jak tablica referencji.
pingwindyktator
  • Rejestracja:ponad 12 lat
  • Ostatnio:27 dni
  • Lokalizacja:Kraków
  • Postów:1055
1

@strawberry shake:
8.3.4: There shall be no references to references, no arrays of references, and no pointers to references.
size_t to typ określający wielkość / ilość. http://en.cppreference.com/w/cpp/types/size_t
Rozumiem że celem jest przekazanie tablcy obiektów typu std::vector. W takim razie podtrzymuje moje rozwiązanie.


do not code, write prose
edytowany 1x, ostatnio: pingwindyktator
SS
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 4 lata
  • Postów:24
0

zdecydowanie mi chodziło o referencję do tablicy
jak tylko uniezależnić to od rozmiaru?

Pebal
Jeżeli rozmiar tablicy określasz na sztywno, to po co Ci rozmiar dynamiczny?
SS
do funkcji przecież będę wrzucał różne wektory, jeden może mieć rozmiar 10, drugi np 1000
Pebal
To wiesz tylko Ty, gdyż nie przedstawiłeś założeń co do tworzonych tablic.
SS
teraz już nie tylko ja :p doprecyzowałem przecież jak tylko podałeś przykład rozwiązania ;p
Pebal
Niestety, ale nadal nie wszystko wiadomo. Dlaczego określasz rozmiar tablicy z góry zakładasz, że string nie będzie miał więcej znaków?
pingwindyktator
  • Rejestracja:ponad 12 lat
  • Ostatnio:27 dni
  • Lokalizacja:Kraków
  • Postów:1055
0

do not code, write prose
SS
to wciąż czarna magia dla mnie :P nagle int nie działa na 64-bitowych systemach w jakimś magicznym przypadku, więc muszę używać jakiegoś size_t, który robi za czarodziejską zmienną. i co z tym że & również magicznie nie działa, i muszę go zastąpić *, nie rozumiem tego :P
pingwindyktator
Czytaj co napisałem.
SS
przeczytałem wszystko, ale poczułem się tak https://www.youtube.com/watch?v=McaV4Ua-QMA spróbuję ten artukuł o size_T jeszcze raz dokładnie przeczytać, nie jestem takim zaawansowanym programistą :p
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 17 godzin
  • Lokalizacja:Szczecin
1
strawberry shake napisał(a):

zdecydowanie mi chodziło o referencję do tablicy
jak tylko uniezależnić to od rozmiaru?

Kopiuj
template<size_t S>
void foo(vector<int>(&arr)[S])

http://melpon.org/wandbox/permlink/4z4VwpwrXybNFok8

Tak możesz to zrobić. Czy to ma sens - to zupełnie inna sprawa. Imho nie ma, a jeśli już musisz użyć tablic (a nie np. wektora wektorów), to zamiast c-tablic, to użyj std::array.


SS
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 4 lata
  • Postów:24
0
pingwindyktator napisał(a):

http://melpon.org/wandbox/permlink/9jgAQV0DwYoXmzmV

czy w takim razie to rozwiązanie tworzy tablicę referencji?

SS
nie rozumiem do końca tej różnicy, dopiero uczę się tego zagadnienia ;/
twonek
przecież trochę wyżej masz 2 posty, które mówią, że nie istnieje coś takiego jak tablica referencji
twonek
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 2 lata
  • Postów:2500
2

Nie, masz tablicę obiektów vector, a funkcja przyjmuje wskaźnik do początku tej tablicy.

MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:minuta
1

Po cholerę te wszystkie odpowiedzi.
Przecież widać, że newbie przekombinował jakiś prosty problem i z tego powodu ma kłopoty.
Takiego argumentu nikomu bym na Code Inspection nie przepuścił.

@strawberry shake zadaj pytanie na nowo, ale opisując co chcesz osiągnąć. Nie pytaj nas jak naprawić twój pomysł na coś, tylko opisz co to jest to coś. Jaki problem ma rozwiązywać twoja funkcja?


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22
SS
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 4 lata
  • Postów:24
0
MarekR22 napisał(a):

Po cholerę te wszystkie odpowiedzi.
Przecież widać, że newbie przekombinował jakiś prosty problem i z tego powodu ma kłopoty.
Takiego argumentu nikomu bym na Code Inspection nie przepuścił.

@strawberry shake zadaj pytanie na nowo, ale opisując co chcesz osiągnąć. Nie pytaj nas jak naprawić twój pomysł na coś, tylko opisz co to jest to coś. Jaki problem ma rozwiązywać twoja funkcja?

Na prośbę Marka:
Postanowiłem w trakcie kodzenia wrzucić do praktyki użycie referencji.

efektem miała być funkcja, która za argument przyjmuje referencję do : vector<string>v[], o dowolnym rozmiarze,
chciałem na tej strukturze zrobić za pomocą tej funkcji jakieś działania, ale tych struktur mam kilka, o różnym rozmiarze, więc chciałem żeby funkcja działała na każdej z nich, żeby nie pisać oddzielnie poleceń dla każdej struktury

niestety, mimo, że przy referencji do łatwiejszych celów nie napotkałem problemów, tu kompiler skwitował to errorem, a w google nic nie znalazłem

w skrócie, dopiero zaczynam przygodę z referencją i uczę się jej używać na różne sposoby

edytowany 1x, ostatnio: strawberry shake
twonek
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 2 lata
  • Postów:2500
2

Tablica o rozmiarze 1 jest innym typem niż tablica o rozmiarze 2 i innym niż tablica o rozmiarze 3 itd. Stąd nie istnieje jedna referencja, która mogłaby wskazywać na tablicę o dowolnym rozmiarze. Do tego celu się używa wskaźnika.

SS
wskaźników użyłem chyba z 2 razy w życiu do tej pory, na razie to już za dużo na dzisiaj dla mnie, jak mi podrzucicie przykład zastosowania, będę wdzięczny
twonek
Po co Ci jakieś skomplikowane przykłady, których do końca nie zrozumiesz i z których nie będziesz miał pożytku? Ucz się dalej, koduj to prędzej czy później trafisz na realne przykłady użycia.
koszalek-opalek
  • Rejestracja:około 9 lat
  • Ostatnio:około 2 lata
2

Po co referencja do tablicy? Może coś przeoczyłem w rozważaniach, ale tablica i tak jest przekazywana przez coś podobnego do referencji :) więc dodanie referencji nie powinno nic zmienić...?

Zobacz pozostałe 3 komentarze
Pebal
@MarekR22: Nie ma potrzeby dodawania dodatkowego argumentu, jeżeli tablica ma stały rozmiar. Tym bardziej, że operacje arytmetyczne na stałych wykonywane są w trakcie kompilacji.
MarekR22
@Pebal tablica o stałym rozmiarze nie jest zbyt praktyczna i przypadki, kiedy ma to sens są bardzo bardzo rzadkie.
Pebal
@MarekR22: Tablica o stałym rozmiarze jest jak najbardziej przydatna. Dowodem na to jest dodanie std::array do biblioteki standardowej. Tablicę taką można utworzyć na stosie i może ona być częścią struktury, a tego tablica dynamiczna nie umożliwia.
MarekR22
w STL jest mnóstwo kas, które mało kto używa.
Pebal
Akurat tablice o stałym rozmiarze są wykorzystywane dosyć często, gdyż w przeciwieństwie do tablic dynamicznych, czas ich tworzenia i niszczenia jest zerowy.
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:minuta
1
  1. Nawet w C tablice nie są przekazywane przez wartość, ale przez wskaźnik. To jest podstawowa wiedza składni języka. Z tego powodu pchanie na siłę tam ampersand (referencji) po prostu nie ma sensu. Tablice zawsze zachowują się tak, jakby były przekazane przez referencję.
  2. zupełnie nie zrozumiałeś co miałem na myśli pisząc "źle zadane pytanie"

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 17 godzin
  • Lokalizacja:Szczecin
0

Z tego powodu pchanie na siłę tam ampersand (referencji) po prostu nie ma sensu
Ma sens jeśli chcesz wymusić jej wielkość.


koszalek-opalek
  • Rejestracja:około 9 lat
  • Ostatnio:około 2 lata
0
kq napisał(a):

Z tego powodu pchanie na siłę tam ampersand (referencji) po prostu nie ma sensu
Ma sens jeśli chcesz wymusić jej wielkość.

Tylko jeszcze, jakby mi ktoś napisał, po co? Poważnie pytam... Bo jakoś nie widzę zastosowania takiego wymuszania i to przez referencję... Jak już, to ja bym wolał tak:

Kopiuj
struct TabInt100 {
    int t[100];
};

No i wtedy sobie mogę przekazywać TabInt100 jak chcę. I przez wartość (kopiowanie), i przez referencję, i przez stałą -- mam wybór semantyki przekazywania wartości, a rozmiar zawsze pozostaje 100...

edytowany 2x, ostatnio: koszalek-opalek
pingwindyktator
  • Rejestracja:ponad 12 lat
  • Ostatnio:27 dni
  • Lokalizacja:Kraków
  • Postów:1055
1
koszalek-opalek napisał(a):
kq napisał(a):

Z tego powodu pchanie na siłę tam ampersand (referencji) po prostu nie ma sensu
Ma sens jeśli chcesz wymusić jej wielkość.

Tylko jeszcze, jakby mi ktoś napisał, po co? Poważnie pytam... Bo jakoś nie widzę zastosowania takiego wymuszania i to przez referencję... Jak już, to ja bym wolał tak:

Kopiuj
struct TabInt100 {
    int t[100];
};

No i wtedy sobie mogę przekazywać TabInt100 jak chcę. I przez wartość (kopiowanie), i przez referencję, i przez stałą -- mam wybór semantyki przekazywania wartości, a rozmiar zawsze pozostaje 100...

Nie. Jak chcesz mieć taki wybór to std::array.


do not code, write prose
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 17 godzin
  • Lokalizacja:Szczecin
2

@koszalek-opalek
Np. jeśli chcesz przyjmować literały stringowe o odpowiedniej długości

Kopiuj
Country isoCodeToCountry(char const(&)[4]);
// isoCodeToCountry("POL") - ok
// isoCodeToCountry("POLSKA") - err

edytowany 1x, ostatnio: kq
tajny_agent
Nazwa funkcji jest myląca, bo zarówno "PL"(ISO-3166-1 alfa-2" jak i "POL"(ISO-3166-1 alfa-3) są poprawnymi kodami ISO :P
kq
Racja, ISO3 czy coś powinno być. Ale myślę, że teraz jest czytelnie
SS
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 4 lata
  • Postów:24
0
MarekR22 napisał(a):

Nawet w C tablice nie są przekazywane przez wartość, ale przez wskaźnik. To jest podstawowa wiedza składni języka. Z tego powodu pchanie na siłę tam ampersand (referencji) po prostu nie ma sensu. Tablice zawsze zachowują się tak, jakby były przekazane przez referencję.

zupełnie nie zrozumiałeś co miałem na myśli pisząc "źle zadane pytanie"

Tablice zawsze zachowują się tak, jakby były przekazane przez referencję
Po co referencja do tablicy? Może coś przeoczyłem w rozważaniach, ale tablica i tak jest przekazywana przez coś podobnego do referencji :) więc dodanie referencji nie powinno nic zmienić...?
dobrze wiedzieć, dzięki :D
to w takim razie rozwiązuje mój problem

#skąd czerpać tą podstawową wiedzę składni języka? czytałem różne poradniki, kursy, ale albo zakładają że już wszystko wiem, przy algorytmice, albo dotyczą kompletnych podstaw... a i w kursach o referencji nie trafiłem kompletnie na tablice, żadnego wytłumaczenia, po prostu nic, (autor założył że już to wiem? wtf)
#trochę już kombinuję, pytanie czysto teoretyczne, chodzi mi o jakieś proste rozwiązanie, nie o jakąś własną, złożoną implementację czy w takim razie da się tablicę przekazać do funkcji tak, jak zwykłą zmienną? najlepiej, jakimś magicznym sposobem który by nie marnował pamięci, ale żeby tablica po zakończeniu funkcji pozostała bez zmian?

http://melpon.org/wandbox/permlink/9jgAQV0DwYoXmzmV
tylko co w takim razie robi to rozwiązanie pingwina? nie jest to w takim razie wyważanie otwartych drzwi :D ?

edit:

  • Tylko jeszcze, jakby mi ktoś napisał, po co? Poważnie pytam... Bo jakoś nie widzę zastosowania takiego wymuszania i to przez referencję... Jak już, to ja bym wolał tak: *
Kopiuj
    struct TabInt100 {
        int t[100];
    };
  • No i wtedy sobie mogę przekazywać TabInt100 jak chcę. I przez wartość (kopiowanie), i przez referencję, i przez stałą -- mam wybór semantyki przekazywania wartości, a rozmiar zawsze pozostaje 100...*

*Nie. Jak chcesz mieć taki wybór to std::array. *
obstawiam że tu jest odpowiedź na pytanie, tylko że za mało wiem żeby to zrozumieć :D

edytowany 3x, ostatnio: strawberry shake
SS
ponawiam prośbę o dobre źródła do czerpania takiej wiedzy
koszalek-opalek
  • Rejestracja:około 9 lat
  • Ostatnio:około 2 lata
1
strawberry shake napisał(a):

#skąd czerpać tą podstawową wiedzę składni języka? czytałem różne poradniki, kursy, ale albo zakładają że już wszystko wiem, przy algorytmice, albo dotyczą kompletnych podstaw... a i w kursach o referencji nie trafiłem kompletnie na tablice, żadnego wytłumaczenia, po prostu nic, (autor założył że już to wiem? wtf)

http://www.cplusplus.com/
http://www.tutorialspoint.com/cplusplus/
https://en.wikibooks.org/wiki/C%2B%2B_Programming -- wszystkie po angielsku, ale jak ktoś chce poważnie zajmować się informatyką/programowaniem, to nie powinien być problem. :)
Po polsku: https://pl.wikibooks.org/wiki/C%2B%2B -- polska wersja tego ostatniego, ale dużo jeszcze nie przetłumaczone...

Ale ponieważ tablice to tak naprawdę część C++ odziedziczona z C, to i w podręcznikach do C trzeba tego szukać:
https://pl.wikibooks.org/wiki/C/Funkcje#Tablice_jako_parametr_funkcji

edytowany 2x, ostatnio: koszalek-opalek
tajny_agent
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad rok
  • Postów:1340
1

<quote="1261559">czy w takim razie da się tablicę przekazać do funkcji tak, jak zwykłą zmienną? najlepiej, jakimś magicznym sposobem który by nie marnował pamięci, ale żeby tablica po zakończeniu funkcji pozostała bez zmian?

Kopiuj
void DajMiTabliceIntowPrzysiegamZeNiczegoNieZmienie( const int* table, size_t table_size );

"I love C++. It's the best language in the world right now for me to write the code that i need and want to write"
~ Herb Sutter
koszalek-opalek
  • Rejestracja:około 9 lat
  • Ostatnio:około 2 lata
1
strawberry shake napisał(a):

#...
#trochę już kombinuję, pytanie czysto teoretyczne, chodzi mi o jakieś proste rozwiązanie, nie o jakąś własną, złożoną implementację czy w takim razie da się tablicę przekazać do funkcji tak, jak zwykłą zmienną? najlepiej, jakimś magicznym sposobem który by nie marnował pamięci, ale żeby tablica po zakończeniu funkcji pozostała bez zmian?

Właściwie to jest pytanie do C, nie do C++ -- bo w C++, przy pisaniu na 'normalnym' :) poziomie, nie ma potrzeby używania tablic -- używa się klas bibliotecznych -- jak już to było pisane -- takich jak vector, array itp., w zależności od potrzeb...

Z drugiej strony, żeby posługiwać się efektywnie C++ nie trzeba znać dobrze C, tylko właśnie używać biblioteki -- co na każdym kroku podkreśla Bjarne S.

edytowany 2x, ostatnio: koszalek-opalek
SS
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 4 lata
  • Postów:24
0
tajny_agent napisał(a):
strawberry shake napisał(a):

czy w takim razie da się tablicę przekazać do funkcji tak, jak zwykłą zmienną? najlepiej, jakimś magicznym sposobem który by nie marnował pamięci, ale żeby tablica po zakończeniu funkcji pozostała bez zmian?

Kopiuj
void DajMiTabliceIntowPrzysiegamZeNiczegoNieZmienie( const int* table, size_t table_size );

kompletnie nie o to mi chodziło

*chodzi mi o takie wywołanie tablicy w funkcji, aby zachowała się kompletnie jak zwykła zmienna. aby można ją zmieniać w funkcji, a po wywołaniu, wróciła do pierwotnego stanu, jak zwykła zmienna.
*Tutaj po prostu zakładam blokadę na kompilator jeśli spróbuję coś z nią zrobić,no ale prostego rozwiązania w takim razie pewnie nie ma, nie szukam długiego kodu, może kiedyś sam na to wpadnę

edytowany 4x, ostatnio: strawberry shake
Zobacz pozostałe 2 komentarze
fasadin
Twoj post to jeden wielki cytat, wiec gdzie Twoj tekst?
SS
już widzę, to jakiś bug, nie formatowałem mojego tekstu w żaden sposób
fasadin
to go sformatuj :D
SS
edytor wkleił mi 1 "</quote>" zamiast 2 na końcu cytatu, naprawione
fasadin
to nie jest do konca rozwiazanie tego problemu, ale ogolnie w C++ nie uizywa sie tablic. Powinienes sie zainteresowac std::vector i zpaomniec o tablicach
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 17 godzin
  • Lokalizacja:Szczecin
1

W takim razie użyj std::array

Kopiuj
void foo(array<int,3> arr)
{
	fill(arr.begin(), arr.end(), 42);
	DBG_CONT(arr);
}

auto main() -> int
{
	array<int,3> main_arr = { {1, 33, 7} };
	DBG_CONT(main_arr);
	foo(main_arr);
	DBG_CONT(main_arr);
}

http://melpon.org/wandbox/permlink/aZbeTuqVdghfiWOm


tajny_agent
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad rok
  • Postów:1340
0
strawberry shake napisał(a):

kompletnie nie o to mi chodziło

*chodzi mi o takie wywołanie tablicy w funkcji, aby zachowała się kompletnie jak zwykła zmienna. aby można ją zmieniać w funkcji, a po wywołaniu, wróciła do pierwotnego stanu, jak zwykła zmienna.
*Tutaj po prostu zakładam blokadę na kompilator jeśli spróbuję coś z nią zrobić,no ale prostego rozwiązania w takim razie pewnie nie ma, nie szukam długiego kodu, może kiedyś sam na to wpadnę

Po prostu przy 'zwykłych' zmiennych przekazywanych przez wartość kompilator sam dba o to, żeby zrobić lokalną kopie parametru. W przypadku tablic musisz to zrobić własnoręcznie.
Rozwiązanie prehistoryczne: Opakuj tablice w klase i zdefiniuj konstruktor kopiujący.
Rozwiązanie nowoczense: Tak jak wspomniano nie raz - użyj std::array/std::vector


"I love C++. It's the best language in the world right now for me to write the code that i need and want to write"
~ Herb Sutter
edytowany 2x, ostatnio: tajny_agent
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)