struktura powłoki bash

struktura powłoki bash
EM
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 10 lat
  • Postów:271
0

Muszę połączyć kilkadziesiąt poleceń które mają być wykonywane w konsoli na wzór basha w sensie że nazwa polecenia, opcje i wszystkie parametry mają być podawane w 1 linii np find C:\ szukany_plik. I teraz jak to widzę - wczytuje komendę do stringa, sprawdzam odpowiednia maską ( boost::regex ), wyciągam ze stringa 1 człon który jest nazwą polecenia, dalej przeszukuje std::vector w którym przechowuje wszystkie polecenia( vector dlatego że oferuje najszybsze wyszukiwanie ) i teraz chciałbym wywołać odpowiednią metodę przekazując jej pozostałe parametry jak w tym przypadku połączyć odpowiednią metodę z nazwą plecenia? przechowywać w vectorze std::pair a w nim nazwę polecenia i wskaźnik na metodę? czy jest lepszy sposób? Prosiłbym o jakieś nakierowanie czy sposób w jaki chce to wykonać jest prawidłowy

n0name_l
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:2412
1

http://www.cplusplus.com/reference/unordered_map/unordered_map/
http://en.cppreference.com/w/cpp/utility/functional/mem_fn

Polecalbym taka kombinacje. Ew. mem_fn mozesz zastapic jakims wzorcem Command.

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

przeszukuje std::vector w którym przechowuje wszystkie polecenia( vector dlatego że oferuje najszybsze wyszukiwanie )

mam nadzieję że żartujesz albo miałeś na myśli std::set albo std::unordered_set...
vector przeszukasz w O(n), set w O(logn) a unordered_set w O(1)...
Wiązanie nazwy z funkcją zrób za pomocą mapy, tak jak napisano wyżej.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
EM
w dokumentacji przeczytałem że operacje wstawiania i usuwania w zbiorze są szybsze niż w std::vector ale wyszukiwanie szybciej odbywa się w std::vector dlatego tak napisałem...
n0name_l
@emacs, a zeby przeszukac zwykla tablice, ile operacji musisz wykonac?
Shalom
Pokaż mi gdzie. Pics or it didn't happen. Zresztą warto myśleć a nie ślepo patrzeć na to co gdzieś ktoś napisał...
EM
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 10 lat
  • Postów:271
0

"Dostęp do poszczególnych elementów w std::vector jest szybki - odbywa się w czasie stałym 0(1), w kontenerze set w czasie logarytmicznym 0(log(N)) czyli wolniej niż w vectorze..." I żeby nie było że się kłócę ! ;) Raczej słucham tego co mówią starsi stażem koledzy ;) ale w tym wypadku to co mówicie jest sprzeczne z tym co mówi dokumentacja...

edit ::
rozumiem - jeżeli znam miejsce gdzie znajduje się szukany element to szybszy jest vector ale mylące jest to "Dostęp / wydajność szukania" ;)

edytowany 1x, ostatnio: emacs
n0name_l
ROTFL! Dostep != wyszukiwanie.
EM
Ja mam akurat "Dostęp / wydajność szukania"... tak czy siak 0(1)
Shalom
hashmapa ma zarówno dostęp jak i szukanie O(1)...
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
3

Panie, to ty po prostu nie rozumiesz co czytasz. DOSTĘP to znaczy odwołanie się wektor[1] albo wektor[10]. Tak jak w zwykłej tablicy wykonujesz to w czasie stałym. Ale WYSZUKANIE czegoś w tablicy to jest zupełnie co innego! Żeby sprawdzić czy element znajduje się w tablicy/wektorze musisz przelecieć każdy jej element czyli wykonać O(n) operacji. W zbiorze opartym o drzewo wystarczy O(logn) operacji a w zbiorze opartym o tablicę hashującą O(1). Gdybyś miał posortowany wektor/tablicę to mógłbyś to też zrobić w czasie O(logn) za pomocą szukania połówkowego, ale wstawianie byłoby wtedy bardziej kosztowne.

A potem słucha sie marudzenia studentów "a po co mam się uczyć o tych algorytmach i strukturach danych skoro to już wszystko jest zaimplementowane", a tu sie okazuje że nie dość że ktoś nie wie jak to jest zaimplementowane to jeszcze nie potrafi używać...


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
EM
kompletnie nie rozumiem złości w Twojej wypowiedzi ale być może "staży i doświadczeni" programiści tak już mają ;) w każdym razie dziękuje za wyjaśnienie, teraz wiem gdzie był mój błąd ;)
Shalom
Bo próbujesz pisać już nieco większe rzeczy (patrząc po twoich tematach) a brakuje ci absolutnych podstaw! :) A taki "stary" to akurat nie jestem! :P
EM
Przepraszam, palnąłem głupotę i z tego co widzę to masz racje brakuje mi podstaw... więc idę doczytać ;)
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)