본문 바로가기
Borland

STL Container 사용법(vector, map, list)

by leo21c 2013. 1. 30.

참고사이트: http://bcbjournal.org/articles/vol3/9910/Using_STL_containers.htm

예제 소스

#include <vcl.h>
#include <stdlib>
#include <vector>
#include <list>
#include <map>
#include <string>
#pragma hdrstop

#include "Unit1.h"
#include "WrkObjs.h"

using namespace std;

#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
void __fastcall 
TForm1::QuitButtonClick(TObject *Sender)
{
  exit(0);
}

void __fastcall 
TForm1::VectorButtonClick(TObject *Sender)
{
  vector<int> myInts;

  ListBox1->Clear();
  ListBox1->Items->Add("Vector Example");
  ListBox1->Items->Add("==============");
  // Add numbers 1-9 to myInts
  for( int y = 1; y < 10; y++ )
    myInts.push_back(y);

  // Add them to ListBox1 using array subscripting
  ListBox1->Items->Add(
    "After adding 1 through 9:");
  for(int y = 0; y < 9; y++)
    ListBox1->Items->Add(String(myInts[y]));

  // Add 10 to the end of the vector
  myInts.push_back(10);

  // Insert a 0 at the front of the list
  myInts.insert(myInts.begin(), 0);

  // Show the contents of the vector
  ListBox1->Items->Add("After adding 0 and 10:");
  for( int y = 0; y < 11; y++ )
    ListBox1->Items->Add(String(myInts[y]));

  // For practice, remove the 10 from the end
  // and place a 25 in the there.
  myInts.pop_back();
  myInts.push_back(25);

  // Show the contents of the vector again
  ListBox1->Items->
    Add("After deleting 10 and adding 25:");
  for( int y = 0; y < 11; y++ )
    ListBox1->Items->Add(String(myInts[y]));

  myInts.clear();
  ListBox1->Items->Add(
    "Vector example complete!");
}
//----------------------------------

void __fastcall 
TForm1::ListButtonClick(TObject *Sender)
{
  list<wisdom*> myWisdom;
  list<wisdom*>::iterator wisIt;
  char sentence[50];
  char* myWords[] = {
    "a ", "nice ", "day ", "Have "};

  ListBox1->Clear();
  ListBox1->Items->Add("List Example");
  ListBox1->Items->Add("============");

  // Add all words to the list from the array.
  for( int x = 0; x < 4; x++ ) {
    char* wordMemory = 
      new char[strlen(myWords[x]+1)];
    strcpy(wordMemory, myWords[x]);
    myWisdom.push_back(new Wisdom(wordMemory));
  }

  // Form a sentence
  ListBox1->Items->Add("My Words of wisdom:");
  *sentence = NULL;
  for(wisIt = myWisdom.begin();
      wisIt != myWisdom.end(); wisIt++)
    strcat(sentence, (*wisIt)->say());
  ListBox1->Items->Add(sentence);

  // Move "Have" to the beginning of the sentence
  wisIt = myWisdom.end();
  Wisdom* tmpWis = (*(--wisIt));
  myWisdom.remove(tmpWis);
  myWisdom.push_front(tmpWis);
  ListBox1->Items->
    Add("My Words of wisdom (corrected):");
  *sentence = NULL;

  // Rebuild the sentence again and delete the 
  // Wisdom objects as we go.
  for(list<wisdom*<::iterator li =
      myWisdom.begin();
      li != myWisdom.end(); li++) {
    strcat(sentence, (*li)->say());
    delete (*li);
  }
  ListBox1->Items->Add(sentence);
}

void __fastcall
TForm1::MapButtonClick(TObject *Sender)
{
  map<string, person=""> anyBody;
  map<string, person="">::iterator persIter;

  ListBox1->Clear();
  ListBox1->Items->Add("Multimap Example");
  ListBox1->Items->Add("================");

  // Add some people to the map
  anyBody["honest"] = Person("Abe Lincoln", 98);
  anyBody["cherry tree"] = 
    Person("George Washington", 100);
  anyBody["watergate"] = 
    Person("Richard Nixon", 74);
  anyBody["pardon"] = Person("Gerald Ford", 76);
  anyBody["peanuts"] = Person("Jimmy Carter", 80);
  anyBody["scandal"] = Person("Bill Clinton", 92);

  // Find a couple of people and show them
  Person who = anyBody["honest"];
  ListBox1->Items->Add((who.getName()).c_str());
  who = anyBody["watergate"];
  ListBox1->Items->Add((who.getName()).c_str());

  // Delete Gerald Ford by calling erase function
  anyBody.erase("pardon");

  // The find function is a better way to look 
  // for entries in the list.
  persIter = anyBody.find("pardon");
  if (persIter != anyBody.end())
    ListBox1->Items->Add((who.getName()).c_str());
  else
    ListBox1->Items->Add("No such president!");
}