gpt4 book ai didi

c++ - 如何显示我自己的数据类型的 std::vector 的内容并使用 std::copy 在控制台上显示名称?

转载 作者:行者123 更新时间:2023-12-02 02:33:56 32 4
gpt4 key购买 nike

我想显示 std::vector<User> 的内容使用std::copy与我通过 std::for_each 实现的方式类似在下面的代码中。

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

}

最佳答案

您可以简单地重载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"));
}

一般来说,我总是有一个重载的ostream作为存储和输出信息的类的一部分。

关于c++ - 如何显示我自己的数据类型的 std::vector 的内容并使用 std::copy 在控制台上显示名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64622470/

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