gpt4 book ai didi

c++ - std::getline 不接受 std::back_insert_iterator

转载 作者:太空狗 更新时间:2023-10-29 20:06:03 27 4
gpt4 key购买 nike

int main() { 
std::deque<std::string> mydeque;
std::back_insert_iterator<decltype(mydeque)> myback_insert_iterator(mydeque);
std::ifstream myifstream("test.txt");
while(std::getline(myifstream, *myback_insert_iterator)) {
}
}

我只是想将一个文本文件逐行读取到一个字符串容器中。这会产生编译器错误:

C2784: could not deduce template argument for 'std::basic_istream<_Elem,_Traits> &' from 'std::ifstream'

怎么了?

最佳答案

尝试:

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");

// Note: istream_iterator<T> uses std::istream& operator>>(std::istream&, T&) to
// read data from the stream. If `T` is a std::string this means it will
// read a single space separated word.

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>()));
// Note: Extra brace required around second iterator here
// This is to avoid the problem with the `Most Vexing Parse`
// Which would otherwise make this a function declaration

}

关于c++ - std::getline 不接受 std::back_insert_iterator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9718421/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com