C++ C++;如何遍历对象的std::vector并在控制台上显示内容
For循环应该遍历std::vector并填充内容 First for loop给我一条错误消息,上面说:C++ C++;如何遍历对象的std::vector并在控制台上显示内容,c++,stdvector,C++,Stdvector,For循环应该遍历std::vector并填充内容 First for loop给我一条错误消息,上面说: 未找到二进制运算符如果您希望能够直接调用std::cout::OPERATOR我认为您希望打印类的一个成员,而不是类本身,则需要为类重载流运算符 例如: cout << (*i).Name << endl; cout这个问题与迭代无关,只是因为你会写 std::string s = "Hello"; std::cout << s; std::str
未找到二进制运算符如果您希望能够直接调用
std::cout::OPERATOR我认为您希望打印类的一个成员,而不是类本身,则需要为类重载流运算符
例如:
cout << (*i).Name << endl;
cout这个问题与迭代无关,只是因为你会写
std::string s = "Hello";
std::cout << s;
std::string s=“Hello”;
std::cout您应该重载输出运算符
#include <iostream>
#include <string>
#include <vector>
#include <iterator>
class MyClass{
private:
std::string newTodayTaskString;
public:
explicit MyClass(const std::string t) : newTodayTaskString (t){}
std::ostream& print(std::ostream& os) const { return os << newTodayTaskString; }
~MyClass(){}
};
std::ostream& operator << (std::ostream& os, const MyClass& obj)
{
return obj.print(os);
}
int main()
{
std::vector<MyClass> vec = {MyClass("add"), MyClass("clear")};
std::copy(vec.begin(), vec.end(), std::ostream_iterator<MyClass>(std::cout, "\n"));
}
#包括
#包括
#包括
#包括
类MyClass{
私人:
std::string newTodayTaskString;
公众:
显式MyClass(const std::string t):newTodayTaskString(t){}
std::ostream&print(std::ostream&os)const{return os您正在迭代“MyClass”的向量,它可能是用户定义的类型。因此,您必须告诉编译器您感兴趣的“MyClass”类的哪些数据。
下面是一个示例代码-仅供理解
// Temp_Practice.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream>
#include<memory>
#include<ostream>
#include <vector>>
using namespace std;
// This example is just for understanding/Demo purpose.
// it will not run on any compiler
class MyClass {
public:
std::string _name;
std::string _address;
int _age;
// Constructor
public:
MyClass() {}
MyClass(std::string name, std::string address, int age) :_name(name), _address(address), _age(age) {}
//Destructor
//..
// other stuff
friend ostream& operator << (ostream& os, std::string _input);
};
ostream& operator << (ostream& os, std::string _input)
{
os << _input.c_str();
return os;
}
int main()
{
std::vector<MyClass> vecMyClass;
MyClass temp("AA", "BB", 1);
vecMyClass.push_back(temp);
MyClass temp1("CC", "DD", 2);
vecMyClass.push_back(temp1);
MyClass temp2("EE", "FF", 3);
vecMyClass.push_back(temp2);
MyClass temp3("GG", "HH", 4);
vecMyClass.push_back(temp3);
MyClass temp4("II", "JJ", 5);
vecMyClass.push_back(temp4);
MyClass temp5("KK", "LL", 6);
vecMyClass.push_back(temp5);
std::vector<MyClass>::iterator itr;
for ( itr = vecMyClass.begin(); itr != vecMyClass.end(); ++itr)
{
// Compiler throws error; it does not know what programer wants to print. So its
// programer responsiblity to let compiler know what to be printed
//std::cout << itr << std::endl; // Error!!!!
// Correct Code
std::cout << itr->_name << itr->_address << itr->_age << std::endl;
}
return 0;
}
//Temp_Practice.cpp:定义控制台应用程序的入口点。
//
#包括“stdafx.h”
#包括
#包括
#包括
#包括>
使用名称空间std;
//此示例仅用于理解/演示目的。
//它不会在任何编译器上运行
类MyClass{
公众:
std::string _name;
std::string\u地址;
国际年龄;
//建造师
公众:
MyClass(){}
MyClass(std::string name,std::string address,int age):\u name(name),\u address(address),\u age(age){}
//析构函数
//..
//其他东西
朋友ostream&操作员正确,很抱歉造成混淆。也感谢您提供的解决方案。
cout << (*i).Name << endl;
std::string s = "Hello";
std::cout << s;
MyClass o("Hello");
std::cout << o;
#include <iostream>
#include <string>
#include <vector>
#include <iterator>
class MyClass{
private:
std::string newTodayTaskString;
public:
explicit MyClass(const std::string t) : newTodayTaskString (t){}
std::ostream& print(std::ostream& os) const { return os << newTodayTaskString; }
~MyClass(){}
};
std::ostream& operator << (std::ostream& os, const MyClass& obj)
{
return obj.print(os);
}
int main()
{
std::vector<MyClass> vec = {MyClass("add"), MyClass("clear")};
std::copy(vec.begin(), vec.end(), std::ostream_iterator<MyClass>(std::cout, "\n"));
}
// Temp_Practice.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream>
#include<memory>
#include<ostream>
#include <vector>>
using namespace std;
// This example is just for understanding/Demo purpose.
// it will not run on any compiler
class MyClass {
public:
std::string _name;
std::string _address;
int _age;
// Constructor
public:
MyClass() {}
MyClass(std::string name, std::string address, int age) :_name(name), _address(address), _age(age) {}
//Destructor
//..
// other stuff
friend ostream& operator << (ostream& os, std::string _input);
};
ostream& operator << (ostream& os, std::string _input)
{
os << _input.c_str();
return os;
}
int main()
{
std::vector<MyClass> vecMyClass;
MyClass temp("AA", "BB", 1);
vecMyClass.push_back(temp);
MyClass temp1("CC", "DD", 2);
vecMyClass.push_back(temp1);
MyClass temp2("EE", "FF", 3);
vecMyClass.push_back(temp2);
MyClass temp3("GG", "HH", 4);
vecMyClass.push_back(temp3);
MyClass temp4("II", "JJ", 5);
vecMyClass.push_back(temp4);
MyClass temp5("KK", "LL", 6);
vecMyClass.push_back(temp5);
std::vector<MyClass>::iterator itr;
for ( itr = vecMyClass.begin(); itr != vecMyClass.end(); ++itr)
{
// Compiler throws error; it does not know what programer wants to print. So its
// programer responsiblity to let compiler know what to be printed
//std::cout << itr << std::endl; // Error!!!!
// Correct Code
std::cout << itr->_name << itr->_address << itr->_age << std::endl;
}
return 0;
}