vectori A on a,b
vectori B on b,c
Mitenkäs nuo sais yhdistettyä tehokkaasti, että vectori C sisältäisi a,b,c?
Vai oliskos joku muu tuohon hommaan parempa kuin vectori?
Toivottavasti joku osaa auttaa.
vectori B on b,c
Mitenkäs nuo sais yhdistettyä tehokkaasti, että vectori C sisältäisi a,b,c?
Vai oliskos joku muu tuohon hommaan parempa kuin vectori?
Toivottavasti joku osaa auttaa.
Vastaukset 12
Vanhimmat
Linearialgebran mukaan
A=[a,b]
B=[b,c]
A B = C =[a b, b c]
Tai tarkoititko että a, b, c ovat koordinaatteja a=a(x,y),a=a(r,fi)... jossain koordinaattisysteemissä?
Ellet osaa kysyä oikein on aika vaikeaa vastata oikein.
Olihan tuo aika sekava kysymys, noh kysytään uudestaan koodin pätkän muodossa.
...
vector A;
vector B;
vector C;
A.push_back("a");
A.push_back("b");
B.push_back("b");
B.push_back("c");
...
Sitten noista A ja B vectoreista pitäisi saada tehtyä C vectori joka sisältäisi a, b ja c. Siis ei tuplia mukaan.
Löysin pitkällisellä etsimisellä tämmösen
...
C.insert(C.end(), A.begin(), A.end() );
C.insert(C.end(), B.begin(), B.end() );
sort(C.begin(), C.end());
loppuu = unique(C.begin(), C.end());
...
Mutta tuo ratkaisu on ihan liian hidas tähän tarkoitukseen. Erityisen hidas tuntuu olevan tuo sort() ja ilman sort() ei tuo unique() toimi oikein. Tuolla järjestyksellä ei ole mitään merkitystä, kunhan tuplia ei vain ole uudessa vectorissa.
Ja välttämättä tämän ei tartte käyttää vectoreita, kunhan vain toimii tuolla yllämainittuun tapaan, mitä nopeemmin sen paremp.
Toivottavasti nyt ymmärretään paremmin missä ongelma ja ostataan auttaa.
vektori on suure,jolla on suuruus ja suunta.
Sana array viittaa samaan.
Taulukko on jokin täysin eri asia, joskin vektoreitakin voi pistää taulukkoon, tai jopa vain kuvata taulukoilla. Näistä asioista ristiin puhuminen on kuin ei osaisi tehdä eroa lehmän ja maidon välillä. Maito ja lehmä, niinikään, ovat täysin eri asioita, vaikka kyllä niidenkin välillä joku asiayhteys vallitsee.
Valitettavasti jopa Micro$oftin ja Borlandin ohjelmointi ympäristöissä,kuin myös suomen koululaitoksessa nämä asiat sotketaan keskenään. Ei ole sitten kumma että jolla kullatavallisellakuollevaisellanämäasiat ovat sekaisin.
Tämän palstan otsikko on C-ohjelmointi.
Lähettämäsi koodi ei ole C/C -koodia, en edes tiedä mitä se on. Etkä sinä katsonut tarpeelliseksi mainita sitä.
Että olisi joku kieli missä et voisi tehdä suora assignment-toiminto vaan pitäisi käyttää jotain funktiota (A.push_back("a");....) on täyttä puppua. Lue manuaali.
*Tämän palstan otsikko on C-ohjelmointi. *
Tiedän siksi viestini täällä onkin.
*Lähettämäsi koodi ei ole C/C -koodia, en edes tiedä mitä se on. *
Koodini on C , toki tuosta puuttuu include ja sun muut, mutta niillä ei ole kysymyksen kannalta mitään tekemistä. Siksi laitoinkin .... merkit. Ja tuo on siis vain esimerkki jotta selviää missä ongelma on.
*Lue manuaali.*
Olen yrittänyt selata erillaisia C sivuja, mut ei niistä ratkaisua löytynyt. Kerro toki mistä sivuilta/manuaalista löytyy?
"vektori on suure,jolla on suuruus ja suunta"
Täysin totta, fysiikassa.
Sekannus johtuu vaihtelevasta kielenkäytöstä fysiikassa, matematiikassa ja IT-maailmassa.
Matematiikassa vektori on yksiulotteinen matriisi. IT:ssä sitä mm. assosioidaan grafiikkaan (vector-based graphics), ilman että varsinaisesti olisi kyseessä vektoria fysiikan mielessä.
Sama koskee "Taulukko" tai "Matriisi". Array, Matrix ja Table englanniksi. IT-maailmassa Array voi olla 1-n-ulotteinen (avainsana monessa ohjelmointikielessä) samoin Matrix (esim ohjelma MatLab). Table kuitenkin tarkoittaa 2-ulotteista taulukkoa (tietokannoissa).
Sekavaa tämä on, siksi kannattaa kysymyksenesittelyssä selventää mistä on kysymys.
kirjastoa käytät tai miten templatetit ovat implementoitu on tietysti mahdotonta ottaa kantaa tuohon kysymykseen.
Mitä nyt ilmeisesti teet on että kopioit kaikki A:n ja B:n elementit (4kpl)C:hen, jonka jälkeen poistat duplikaatit (C.unique()). Tämä duplikaattien poisto on yhtä hidas kuin vektorin lajittelu! Sen jälkeen lajittelet C:n!
Templatessa on varmasti joku menetelmä jolla voit hakea tietyn elementin (esim .GetNth(int ); tai jotain) tai sitten sinun on luotava oma aliluokka johon implementoit tuon toiminnallisuuden (templatetissa on todennäköisesti muuttuja nimeltään stack tai jotain, jonne elementit varastoidaan. Sen jälkeen:
C.push(A.GetNth(0));
C.push(A.GetNth(1));
C.push(B.GetNth(1));
Tämä on paljon nopeampi koska vältyt kahdesta lajittelusta.
Mitä en ymmärrä on miksi käytät tällaista tietorakennetta jos haluat nopeutta. Staattinen taulukko on nopein ratkaisu, tyyppi-explisiittisesti implementoitu dynaaminen taulukko hitaampi mutta nopeampi kuin template.
Kirjoitit:
vector A;
vector B;
vector C;
A.push_back("a");
A.push_back("b");
B.push_back("b");
B.push_back("c");
Tässä ei ole yhtään C-kielen avainsanaa. "vector" on template (luokka joka voi ottaa erityyppisiä argumentteja (int, string...), mutta se ei ole osaa c-kieltä vaan se on implementoitu jonkun kirjaston avulla (ellet ole kirjoittanut sitä itse!).
Kuka tahansa voi kirjoittaa tuollaisen templaten (ja varmasti niitä on kirjoitettu tuhansia vastaavia!).
B.push_back("c"); on joku vector-luokan menetelmä (function member). Ei ole osaa C-kieltä, mitä se tekee voi vain arvata!
Ilman että annat templaten C-koodia on täysin mahdotonta auttaa sinua, sen kai itsekin ymmärrät. Mitä nyt teet on yhtä hassua kuin jos kysyisit:
"Mitä funktio void dhshhgf(int gfgdgd); tekee?"
Minusta tuo on selvää C :aa ja vektori kuuluu STL:ään, joka lasketaan "perus" C :ksi. Mitä oikein ajat takaa?
Olethan tietoinen, että tämä palsta on myös C - ja C#-kielille?
Kiitoksia todella paljon tuo selventi jonkin verran.
*kirjastoa käytät tai miten templatetit ovat implementoitu on tietysti mahdotonta ottaa kantaa tuohon kysymykseen. *
Kirjasto on vector, luulin sen selviävän tuosta esimerkistä. Tämänlisäksi cstdlib, iostream ja fstream. Voin toki laittaa illemmal tuon esimerkin kokonaisuudessaan tänne, kunhan vain pääsen koneelle jossa tuo on.
*Mitä en ymmärrä on miksi käytät tällaista tietorakennetta jos haluat nopeutta. Staattinen taulukko on nopein ratkaisu tyyppi-explisiittisesti implementoitu dynaaminen taulukko hitaampi mutta nopeampi kuin template. *
Onko template siis vectori aina hitain vaihtoehto?
Ainaskin monissa oppaissa tuon käyttöä on suositeltu ja perusteluina juurikin nopeus, tiedä sit.
Kerroppas miten staattisia taulukoita pystyy kopioimaan noin?
A ja B taulussa tietoja voi olla x kappaletta, mutta kuitenkin tietyissä rajoissa, joten staattinen taulukko riittäisi.
Taulukoissahan ei ole ongelmaa dublikaattien kanssa koska samoja avaimia ei voi olla kahta, joten yhdistämisen C taulukos luulis onnistuvan helposti.
Aivan selvästihän tässä viitataan c :an stl:ään.
Jos et c :aa osaa niin ole hiljaa, näytät vaan kakaralta noilla kommenteilla..
alkup. kysyjälle neuvoksi sen et voit vaikka loopata noi vektorit läpi ja laittaa kaikki elementit uuteen vektoriin.
Esim.
for(int i=0; i
ei varmaankaan ratkea tällä palstalla.
"Tämän palstan otsikko on C-ohjelmointi."
"Lähettämäsi koodi ei ole C/C -koodia, en edes tiedä mitä se on."
....
"... on täyttä puppua. Lue manuaali."
Tämä palsta on todellakin tarkoitettu ohjelmointi asioihin. Kenellekään ei aseteta sellaista vaatimusta että hänen tulisi osata enemmän kuin osaa tai ilmaista asiansa paremmin kuin sillä hetkellä parhaaksi näkee. Jos tällaiset asiat tuottavat ongelmia, niihin kannattaa hakea apua ensisijaisesti kunnallisen terveydenhuollon organisaatioilta.
Toivon todella että minua viisaammat anatavat parempia vastauksia itse alkuperäiseen kysymykseen. Itse olisin taipuvainen käyttämään staattisia taulukkoja, ja mieluummin while kuin for loooppia. While looppi istuu yllättävän usein for loopin tilalle. Sen voi kirjoittaa aluksi simppelinä, ja kehitellä ja lisäillä ehtoja sitä mukaa kuin tarvetta ilmenee.