Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Вектор в STL


Автор: ak2007 10.8.2007, 15:52
Нашел в сети этот форум. Он отличный!
Искал ответ на вопрос:

Как мне присвоить значение переменной. Это значение записывается
в файл "file.txt". Как туда записать я знаю (код ниже). Но мне нужно
записывать эту текстовую строку не в файл, а в переменную.

Есть несколько строк.
Код

ak.push_back("bla bla bla");
ak.push_back("rrrr");
ak.push_back("sss");



Я нахожу нужную и записываю её в файл.

Код

  std::vector<std::string>::iterator it = std::find(ak.begin(), ak.end(), "sss");

  if(it == ak.end())
  {

  }
  else
  {

// Я нашел "sss". Теперь запишу её в файл. А как мне "sss" присвоить
// в качестве значения переменной.


    std::ofstream ofile ("file.txt");
std::copy (ak.begin (), ak.end (), std::ostream_iterator<std::string> (ofile, "\n"));

// Что то типа string abc = "sss"; но при условии, что "sss" может быть
// иным текстом. Так вот не работает:

// abc = it; и так тоже: abc = std::find(ak.begin(), ak.end(), "sss");  

}

Автор: NoNo 10.8.2007, 16:29
попробуй буфер в памяти "strstream"
и выводи туда данные как в обычный фаил....
а оттуда сможешь вытащить их куда угодно

Автор: Vyacheslav 10.8.2007, 16:35
Что Вы очень сложно пишите  в файл строку smile  . В вашем варианте туда пишется не "sss", а все содержимое вектора
Код

std::vector<std::string>::iterator it = std::find(ak.begin(), ak.end(), "sss");

  if(it == ak.end())
  {

  }
  else
  {

// Я нашел "sss". Теперь запишу её в файл. А как мне "sss" присвоить
// в качестве значения переменной.


    std::ofstream ofile ("file.txt");
    ofile << *it;
    string abc = *it;
}

Автор: ak2007 10.8.2007, 16:36
Цитата(NoNo @ 10.8.2007,  16:29)
попробуй буфер в памяти "strstream"
и выводи туда данные как в обычный фаил....
а оттуда сможешь вытащить их куда угодно

Так не пойдет. Нужно напрямую в переменную.

Добавлено через 53 секунды
Цитата(Vyacheslav @ 10.8.2007,  16:35)
Что Вы очент сложно пишите  в файл. Во всяком случае в вашем варианте туда пишется не "sss", а все содержимое вектора
Код

std::vector<std::string>::iterator it = std::find(ak.begin(), ak.end(), "sss");

  if(it == ak.end())
  {

  }
  else
  {

// Я нашел "sss". Теперь запишу её в файл. А как мне "sss" присвоить
// в качестве значения переменной.


    std::ofstream ofile ("file.txt");
    ofile << *it;
    string abc = *it;
}

Да. Я условно так написал. Суть понятна.

Добавлено через 2 минуты и 46 секунд
Vyacheslav СПАСИБО.
Я нашел. Просто забыл как smile

Автор: Xenon 10.8.2007, 18:10
Жаль в STL не засунули copy_if (о чем сам Страуструп сам себя карает в книге). Ну, не проблема, можно и самому smile 
Код

template <typename PRED, typename InIter, typename OutIter> void copy_if(InIter FIRST, InIter LAST, OutIter OUT, PRED Cond)
{
    for ( ; FIRST != LAST; ++FIRST)
        if ( Cond(*FIRST) ) OUT = *FIRST;
}

int main(int argc, char argv[]) 
{
    std::ofstream out_file("d:\\myfile.txt");
    std::vector<std::string> arr;
    arr.push_back("abr");
    arr.push_back("sss");
    arr.push_back("sss");
    arr.push_back("bdfb");
    arr.push_back("abrr");
    copy_if( arr.begin(), arr.end(), std::ostream_iterator<std::string>(out_file, " "), std::bind2nd( std::equal_to<std::string>(), "sss" ) );
    std::cin.get();
    return 0;
}

Автор: Любитель 12.8.2007, 23:31
Цитата(Xenon @  10.8.2007,  18:10 Найти цитируемый пост)
OUT = *FIRST

Итератору присваиваем разыменованный итератор?  smile Может так: *OUT++ = *FIRST ?

Автор: Xenon 13.8.2007, 03:18
Любитель, да-да, ошибься пока катал smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)