尝试:
int main()
{
std::deque<std::string> mydeque;
std::ifstream myifstream("test.txt");
std::string line;
while(std::getline(myifstream, line)
{
mydeque.push_back(line);
}
}
如果每行只有一个单词,您可以简化为:
int main()
{
std::deque<std::string> mydeque;
std::ifstream myifstream("test.txt");
std::copy(std::istream_iterator<std::string>(myifstream),
std::istream_iterator<std::string>(),
std::back_inserter(mydeque)
);
}
如果每行包含多个单词,而您想要使用后插入器,则需要定义一个类,在此对象中读取整行以便与迭代器一起使用:
struct Line
{
std::string data;
operator std::string const&() const {return data;}
friend std::istream& operator>>(std::istream& s, Line& dst)
{
return std::getline(s, dst.data);
}
};
int main()
{
std::deque<std::string> mydeque;
std::ifstream myifstream("test.txt");
std::copy(std::istream_iterator<Line>(myifstream),
std::istream_iterator<Line>(),
std::back_inserter(mydeque)
);
}
或者我们可以直接使用构造函数:
int main()
{
std::ifstream myifstream("test.txt");
std::deque<std::string> mydeque(std::istream_iterator<Line>(myifstream),
(std::istream_iterator<Line>()));
}
std::back_inserter
,而不是显式声明一个back_insert_iterator<T>
。 - pmrstd::back_inserter(mydeque)
而不是使用decltype
- 这是一个函数模板,会自动为您推断类型。您可以直接将其传递给您的函数,或者使用auto
声明变量,使您的代码更易读。 - Björn Pollex