这将打印我的字符串的地址,但不打印其内容
#include <memory>
#include <string>
#include <list>
#include <iostream>
#include <iterator>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
unique_ptr<list<shared_ptr<string>>> upList (new list<shared_ptr<string>>);
shared_ptr<string> spNation (new string ("India"));
upList->push_back (spNation);
copy (upList->begin(), upList->end(), ostream_iterator<shared_ptr<string>> (cout, "\n "));
return 0;
}
我的问题是:
ostream_iterator<shared_ptr<string>>
将shared_ptr或字符串作为其'主要对象。答案 0 :(得分:3)
ostream_iterator<shared_ptr<string>>
将shared_ptr或字符串作为其主要对象。
您已为ostream_iterator
实例化了shared_ptr<string>
,这就是它将尝试输出的内容。
如何使用这种方法打印实际的字符串内容(即印度)。
如果您确实想要出于某种原因使用共享指针,则不能使用copy
,因为这不会撤消额外的间接级别。要么使用普通循环,要么摆脱不必要的间接:
list<string> list;
list.push_back("India");
copy(list.begin(), list.end(), ostream_iterator<string>(cout, "\n "));
当然,如果没有所有的箭头,模板,新表达式和伪肛门疣,它看起来并不令人兴奋,但任何试图维护代码的人都不会感谢你添加这些装饰。
这种方法比传统的for循环更适合打印所有节点内容
最好使代码更简单。如果没有,则不是。
答案 1 :(得分:1)
首先:为什么在这里使用shared_ptr<string>
代替string
?你不应该这样做。
1)
shared_ptr<string>
2)将std::for_each
与lambda(或range-based for loop
)
for_each(upList->begin(), upList->end(), [](const shared_ptr<string>& p)
{
cout << *p << endl;
});
或
for (const auto& p : upList)
{
std::cout << *p << std::endl;
}