C++11 如何显示自己数据类型的std::vector的内容,并使用std::copy在控制台上显示名称?
我想使用C++11 如何显示自己数据类型的std::vector的内容,并使用std::copy在控制台上显示名称?,c++11,C++11,我想使用std::copy来显示std::vector的内容,这与我在下面代码中通过std::for_实现的方式类似 #include <iostream> #include <vector> #include <string> #include <algorithm> class User { private: std::string m_sName; public: User(std::string sName):m_sName
std::copy
来显示std::vector
的内容,这与我在下面代码中通过std::for_实现的方式类似
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
class User {
private:
std::string m_sName;
public:
User(std::string sName):m_sName(sName) {}
std::string GetName()const {
return m_sName;
}
};
int main()
{
std::vector<User> vectNames;
vectNames.emplace_back("Jack");
vectNames.emplace_back("George");
vectNames.emplace_back("Jose");
//How can I get std::copy to do what the std::for_each is doing?
std::copy(vectNames.begin(), vectNames.end(), std::ostream_iterator<User>(std::cout, "\n"));
//The following line is what I really would like std::copy to do.
std::for_each(vectNames.begin(), vectNames.end(), [](const User &user) {std::cout << user.GetName() << "\n"; });
}
#包括
#包括
#包括
#包括
类用户{
私人:
std::字符串m_sName;
公众:
用户(std::string sName):m_sName(sName){}
std::string GetName()常量{
返回m_sName;
}
};
int main()
{
std::向量向量名称;
vectNames.安置回(“杰克”);
vectNames.安置回(“乔治”);
vectNames.安置回(“Jose”);
//如何让std::copy执行std::for_正在执行的操作?
std::copy(vectNames.begin()、vectNames.end()、std::ostream\u迭代器(std::cout,“\n”);
//下面这行是我真正希望std::copy执行的操作。
std::for_each(vectNames.begin()、vectNames.end()、[](const User&User){std::cout您可以简单地重载ostream
操作符:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
class User {
private:
std::string m_sName;
public:
User(std::string sName):m_sName(sName) {}
std::string GetName()const {
return m_sName;
}
void print(std::ostream& where) const
{ where << m_sName; }
};
/// Overloaded ostream operator
std::ostream& operator<< (std::ostream& out, const User& user)
{
user.print(out);
return out;
}
int main()
{
std::vector<User> vectNames;
vectNames.emplace_back("Jack");
vectNames.emplace_back("George");
vectNames.emplace_back("Jose");
std::copy(vectNames.begin(), vectNames.end(), std::ostream_iterator<User>(std::cout, "\n"));
}
#包括
#包括
#包括
#包括
类用户{
私人:
std::字符串m_sName;
公众:
用户(std::string sName):m_sName(sName){}
std::string GetName()常量{
返回m_sName;
}
无效打印(标准::ostream&where)常量
{where由于您的评论,我是一名新的程序员,正在尝试不同的想法,我将此答案发布为另一种方法,它还展示了一些您可能感兴趣的算法
我认为如果你想做的是两者兼而有之的话,std::copy
不是正确的工具
对集合中的对象调用成员函数,并且仅在此之后
将它们复制/打印到屏幕上
一种可能是最好的方法是中的方法,它基本上只通过std::copy
解决第2点(根据您的问题,这是您已经知道的方法),第1点,通过重载你能告诉我们为什么需要std::copy
吗?std::for_each
似乎确实是一个更好的工具来完成你的工作。你并不是真的在任何地方复制vectNames
;事实上,你就是它,转换的结果就是你想要打印的/“copy”在屏幕上。我是一名新程序员,正在尝试不同的想法。很高兴知道。我添加了一个答案,您可能会喜欢:)哇!非常感谢!我真的非常感谢您为我展示了一种不同的方法!非常感谢!我已将此标记为最佳答案!我发现您展示给我的其他一些方法非常吸引人!这增加了我的知识!我的IDE(Visual Studio 2019)不承认下面的内容包括:包含GeorgeAustinBradley的任何潜在的解决方案吗?我在C++ 17中有它。@也许安装Boost?我在ARCLinux上,所有的东西都是用它来做的。我猜你在Windows上,这总是很痛苦的。大概已经存在了关于如何安装的问题。l Boost库。这与Windows无关,Boost总是需要安装的,而且它显然是在您的ArchLinux中。@Georgaeustinbradley,最好找到Boost与特定MS产品相关的信息,以避免意外。@zdim,是的,我可能会用开箱即用的部分误导读者;我的意思是在Arch上安装Boost没有任何作用不要执行多个命令,即pacman-sboost
。