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


Автор: YonasBriginas 27.3.2006, 20:16
всем доброго времени суток.
есть тестовая программа
Код

#include <fstream>
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>

using namespace std;

int main()
{
    ifstream ifile("in");
    istream_iterator<string> ii(ifile);
    istream_iterator<string> eos;
    vector<string> vv (ii, eos);
    cout << count(vv.begin(), vv.end(), "str") << endl;
    ifile.close();
    return 0;
}


компилятор ругается на vector<string> vv (ii, eos);

: error C2664: '__thiscall std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_t
raits<char>,class std::allocator<char> > > >::std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<ch
ar> > > >(unsigned int,const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &,const class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > &)' : cannot
convert parameter 1 from 'class std::istream_iterator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,char,struct std::char_traits<char> >' to 'unsigned int'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

объясните, пожалуйста, в чём моё недопонимание.

Автор: Void 27.3.2006, 20:23
Шайтан его знает, VC 7.1 и 8.0 прекрасно компилируют.
Такое впечатление, будто компилятор не видит соответствующей сигнатуры конструктора вектора. Попробуй так:
Код

vector<string> vv;
vv.assign(ii, eos);

Автор: YonasBriginas 27.3.2006, 21:07
to Void:

и так тоже не хочет.

у меня ещё одни вопрос созрел:
вектор состоит из объёктов класса string. можно ли ограничить размер этих объектов?
поясню, что хотел сказать:
у нас есть большой файл, открыли его как бинарный, если я буду из файлового потока заполнять вектор из элементов класса string, то он захочет затолкать весь файл в один оъект вектора.

что делать в этом случае?

Автор: Earnest 28.3.2006, 07:43
Цитата(YonasBriginas @ 27.3.2006, 21:07 Найти цитируемый пост)
и так тоже не хочет.

В некоторых версиях STL нет темплэйтных функций для любых итераторов. Может, это твой случай. Попробуй так:
Код

std::copy(ii,eos,std::back_insertor(vv));

По производительности это, конечно, хуже, но что поделать...

Цитата(YonasBriginas @ 27.3.2006, 21:07 Найти цитируемый пост)
у нас есть большой файл, открыли его как бинарный, если я буду из файлового потока заполнять вектор из элементов класса string, то он захочет затолкать весь файл в один оъект вектора.

А что в большом файле? Только строки, разделенные чем? Я бы не стала особо извращаться, а просто ручками написала цикл... Но можно попробовать поток доработать...

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