---
title: "Söka i en array eller vektor"
type: "forum-thread"
url: "https://www.webforum.nu/amne/c-cpp/99431-söka-i-en-array-eller-vektor"
topic: "C/C++"
topic_url: "https://www.webforum.nu/amne/c-cpp"
author: "tosses"
published: "2004-03-14T16:22:33.000Z"
updated: "2004-03-16T09:51:12.000Z"
replies: 17
views: 672
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/c-cpp/99431-söka-i-en-array-eller-vektor"
---

# Söka i en array eller vektor

## #1 — tosses, 2004-03-14T16:22Z

Hej!

Jag har en array eller vektor(nybörjare) med en massa tal.
ex:

vec\[0\]=2
vec\[1\]=2
vec\[2\]=4
vec\[3\]=4
vec\[4\]=4
vec\[5\]=6
vec\[6\]=8
vec\[7\]=9

Nu vill jag leta igenom vektorn och kolla vilka tal som saknas.

ex:
Talen 3,5,7 finns inte i vektorn.

jag vill leta efter tal mellan 2 och 200 och ta fram de som inte finns.

HJÄLP!!!

Permalänk: https://www.webforum.nu/p/99431

## #2 — PeW, 2004-03-14T19:50Z

Tja, med två loopar kan du ju stega igenom intervallet och för varje steg kolla igenom vektorn efter samma tal.. i sin enklaste och kanske slösaktigaste form:

```
 loop 2..200 do
     loop 0..vect_size
        if range_index equals vect_index then do something
```

Typ  ;)

Permalänk: https://www.webforum.nu/p/1300945

## #3 — tosses, 2004-03-14T20:21Z

Hmm jag fattar hur du menar men jag tror jag behöver mer hjälp med hur koden ska skrivas.

for(int a=2;a\<=20;a++){
  for(b=0;b\<=22;b++){
     if(a==vec**){
       cout\<\<a;	
     }
  }	
}

Eller ?? hjälpppp**

Permalänk: https://www.webforum.nu/p/1300984

## #4 — PeW, 2004-03-14T21:08Z

Jo så kan man göra. Det är iofs inte särskilt effektivt vid stora arrays, men det kan ju duga. Ifall det är sorterade arrays kan du ju precisera sökningen och bara söka av ett litet intervall i arrayen.

Permalänk: https://www.webforum.nu/p/1301012

## #5 — tosses, 2004-03-14T21:14Z

Kruxet är att med den koden hittar jag siffror som finns. Jag vill hitta de som inte finns!

Vektor innehåller:
2
4
5
6
8
9

Jag vill ha en utskrift på att 3 och 7 inte finns med i vektorn

Permalänk: https://www.webforum.nu/p/1301014

## #6 — PeW, 2004-03-14T21:21Z

Men byt bara ut == mot != så får du det resultatet  :)

Permalänk: https://www.webforum.nu/p/1301017

## #7 — tosses, 2004-03-15T08:57Z

Fast det går inte.

for(int a=2;a\<=20;a++){
for(b=0;b\<=22;b++){
if(a!=vec**){
cout\<\<a; 
}
} 
}

Om jag jämför vec\[1\] med 1,2,3,4,5,6,7,8,9 så kommer 8 siffror att vara != från vec\[1\]. Jag vill veta vilka siffror som saknas.

Det måste gå att lösa!!!**

Permalänk: https://www.webforum.nu/p/1301153

## #8 — Mc Fetto, 2004-03-15T09:00Z

du kan ju alltid fylla en lista av ngt slag med 2-200 sedan går du igenom vectorn, för varje index i vectorn tar du bort den siffran i från listan...
Kanske inte den bästa lösningen men dock en lösning!

Permalänk: https://www.webforum.nu/p/1301157

## #9 — PeW, 2004-03-15T13:20Z

> **tosses skrev:**
>
> Fast det går inte.
> 
> for(int a=2;a\<=20;a++){
> for(b=0;b\<=22;b++){
> if(a!=vec**){
> cout\<\<a; 
> }
> } 
> }
> 
> Om jag jämför vec\[1\] med 1,2,3,4,5,6,7,8,9 så kommer 8 siffror att vara != från vec\[1\]. Jag vill veta vilka siffror som saknas.
> 
> Det måste gå att lösa!!!**

Visst går det att lösa. Till att börja med blir det till att låta yttre och inre loop byta plats och sen kastar vi in lite fler villkor. Vet inte om du menar intervallet som ska kontrolleras ligger mellan 2 till 20 eller mellan högsta och minsta värde i arrayen. Båda alternativen kan dock lösas med nedan exempel:

```
int lookahead;
int higher = 200;
int vect[xxx] = {x...x};

  for(int i=0;i<VECTSIZE;i++)
    for(int j=vect[i];j<=higher;j++){
        if(i+1<VECTSIZE)
          lookahead = vect[i+1];
         //ta bort nedan två rader ifall intervallet är inom minsta/högsta i arrayen
         //är det inom din limit upp till 200 som gäller ska de vara kvar
        else              
          lookahead = higher+1;

        if(lookahead<=j)
      	   break;
        if(vect[i]<j)
        cout << "följande tal saknades  " << j << endl;  
      }
```

Förutsätter dock att vektorn är sorterad.

Permalänk: https://www.webforum.nu/p/1301267

## #10 — tosses, 2004-03-15T13:58Z

Oj !!  :)  Ska kolla detta så fort jag har tid och kommer åt filerna!!!!

Hoppas hoppas hoppas!!!

Permalänk: https://www.webforum.nu/p/1301293

## #11 — tosses, 2004-03-15T20:25Z

Skulle du kunna förklara hur din sökning fungerar!! Hur du tänker. Skulle vara väldigt tacksam!!

Förresten så fungerar det bra!!

Permalänk: https://www.webforum.nu/p/1301519

## #12 — PeW, 2004-03-15T20:41Z

Okej..  

Vi har en array och vi har ett intervall av naturliga tal. Vi behöver veta om nästa tal i arrayen är lika eller är nästa tal i ordningen av de naturliga talen. Är det lika så är allt okej och vi gör ingenting utan vi stegar till nästa position och utför samma koll en gång till. Om det skulle vara ett glapp skriver vi ut glappet (eller gör vad som helst med det talet) och stegar till nästa. Ifall vi når slutet av arrayen men har mer att hämta från vårt intervall sätter vi kontrollen (lookahead) till ovanför intervallet och därmed skrivs resterande tal i intervallet ut. Ifall man inte vill ha det så utan bara vill ha talen inom arrayens intervall är det bara att låta bli att sätta kontrollen till steget ovanför intervallet.

Btw..  sätt gärna mitt svar som svaret accepterat  ;)

Permalänk: https://www.webforum.nu/p/1301526

## #13 — tosses, 2004-03-15T22:35Z

Hmm så här borde jag kunna göra istället::

for(p=0;p\<vektorstorlek;p++){
if(vec\[p+1\]-vec\[p\]\>=2){
cout\<\<vec\[p\]+1\<\<" ";
}
}

Permalänk: https://www.webforum.nu/p/1301590

## #14 — PeW, 2004-03-16T07:13Z

Men då blir det inte samma sak.  :)

För det första så har du då inte samma intervall och sen skriver du inte ut glapp större än ett, även om du noterar dem, detta pga av du endast loopar arrayen inte ett intervall av naturliga tal. För det andra måste du ha en koll på indexeringen av arrayen, som det är ovan blir det utanför index vid det sista elementet.

Permalänk: https://www.webforum.nu/p/1301635

## #15 — tosses, 2004-03-16T07:31Z

ja men då kan jag loopa ut det tomma intervallet heller hur!

om resultatet\>=2 t.ex. 5 så loopar jag ut:
vec\[p\]+1
vec\[p\]+2
vec\[p\]+3
vec\[p\]+4

Så har jag exakt samma funktion

om res är t.ex 2 så loopar jag ut
vec\[p\]+1

Funkar klockrent eller :)

Permalänk: https://www.webforum.nu/p/1301643

## #16 — PeW, 2004-03-16T07:50Z

Ifall du bygger ut 

```
for(p=0;p<vektorstorlek;p++){
if(vec[p+1]-vec[p]>=2){
cout<<vec[p]+1<<" ";
}
}
```

med det du skriver ovan så får du ungefär det som jag skrev längre upp - ja :)

Permalänk: https://www.webforum.nu/p/1301657

## #17 — tosses, 2004-03-16T08:32Z

Kul!!!!!!!!!! Och tack så mycket!!!

fantastiskt att man kan få experthjälp utan att vara inskriven på något universitet!!!!

KANOON! :e

Permalänk: https://www.webforum.nu/p/1301669

## #18 — PeW, 2004-03-16T09:51Z

Kul att det funkar. Sånt här är roligare att diskutera än att bara hänvisa till standardfunktioner  :)

Permalänk: https://www.webforum.nu/p/1301700

---

Tråden på webben: https://www.webforum.nu/amne/c-cpp/99431-söka-i-en-array-eller-vektor
