打印3D矢量
Printing 3D vector
我正在尝试打印3D矢量,但面临操作符不匹配的问题。这就是我填充向量
的方法masterList.push_back(tokens)
我试过这个代码:
copy(masterList.begin(), masterList.end(), ostream_iterator<string>(cout, "n"));
and for look:
for( vector<vector<vector<string>>>::const_iterator i = masterList.begin(); i != masterList.end(); ++i)
cout<<*i<<' ';
最新的cout
不打印3D矢量元素的指针
它只是不知道如何打印*i
元素(类型为vector<vector<string>>
)。您需要两个内部循环来打印每个字符串元素。
使用Boost Spirit业力:
std::cout << format_delimited(auto_, ' ', v) << "n";
打印
a0 a1 a2 a1 a2 a3 a2 a3 a4 a3 a4 a5 b0 b1 b2 b1 b2 b3 b2 b3 b4 b3 b4 b5
std::cout << format(auto_ % ',' % ' ' % eol , v) << "n";
打印
a0,a1,a2 a1,a2,a3
a2,a3,a4 a3,a4,a5
b0,b1,b2 b1,b2,b3
b2,b3,b4 b3,b4,b5
std::cout << format_delimited( ("{n" << ("t{" << *auto_ << '}') % eol << "n}n") % eol, ' ', v) << "n";
打印
{
{ a0 a1 a2 }
{ a1 a2 a3 }
}
{
{ a2 a3 a4 }
{ a3 a4 a5 }
}
{
{ b0 b1 b2 }
{ b1 b2 b3 }
}
{
{ b2 b3 b4 }
{ b3 b4 b5 }
}
或者您可以使用老式的基于范围的
for (auto& d1 : v) {
for (auto& d2 : d1) {
for (auto& d3: d2)
std::cout << d3 << " ";
std::cout << "n";
}
std::cout << "n";
}
完整的演示:
#include <vector>
#include <string>
#include <iostream>
#include <boost/spirit/include/karma.hpp>
namespace karma = boost::spirit::karma;
int main()
{
const std::vector<std::vector<std::vector<std::string>>> v { {
{ "a0", "a1", "a2" },
{ "a1", "a2", "a3" },
}, {
{ "a2", "a3", "a4" },
{ "a3", "a4", "a5" },
},
{
{ "b0", "b1", "b2" },
{ "b1", "b2", "b3" },
},
{
{ "b2", "b3", "b4" },
{ "b3", "b4", "b5" },
} };
for (auto& d1 : v) {
for (auto& d2 : d1) {
for (auto& d3: d2)
std::cout << d3 << " ";
std::cout << "n";
}
std::cout << "n";
}
using namespace boost::spirit::karma;
std::cout << format_delimited(auto_, ' ', v) << "n";
std::cout << format(auto_ % ',' % ' ' % eol , v) << "n";
std::cout << format_delimited( ("{" << *auto_ << "}"), ' ', v) << "n";
std::cout << format_delimited( ("{n" << ("t{" << *auto_ << '}') % eol << "n}n") % eol, ' ', v) << "n";
}
你可以这样做:
for( vector<vector<vector<string>>>::const_iterator i = masterList.begin(); i != masterList.end(); ++i)
{
for( vector<vector<string>>::const_iterator j = i->begin(); j != i->end(); ++j)
{
for( <vector<string>::const_iterator k = j->begin(); k != j->end(); ++k)
{
cout<<*k<<' ';
}
}
}
不确定这是否是您得到错误的原因,但我知道我在使用模板内部时遇到过这样的问题,因为您最终会在代码中的某个地方使用">>",这意味着与预期的非常不同。
">>"是c++中按位右移操作符
要解决这个问题,你只需要在它们之间放一个空格。例如:而不是:
vector<vector<vector<string>>>::const_iterator
这样做:
vector<vector<vector<string> > >::const_iterator
当然,我没有尝试编译你的代码,这只是一个观察查看示例代码。
相关文章:
- 3D 矢量在球体上迭代
- 尝试访问 3D 矢量中的元素时出现 Seg 错误
- 计算每个维度的两个 3D 矢量之间的角度
- 如何使用偏航、俯仰和滚动旋转 3D 矢量?
- C++ 和 Lua 函数之间的交互与 3D 矢量参数
- 如何根据物体位置和速度,玩家位置和向前矢量计算左耳和右耳的音量?(3D声音)
- 用于 3D 矢量的高效除法运算符
- 将 3D 矢量浮点打包到无符号 int 中并将其解压缩
- 3D 矢量 - 变换和减号
- 我如何将一组整数集变成C 中的3D矢量
- 如何获取 3D 标准::矢量的大小
- C :将矢量重新为3D数组
- 3D 矢量 - "No instance of overload function?"
- 使矢量 3D 源自矢量 ND,需要保留场 x y z
- 在转换3D矢量时,为什么GLM给出错误的结果
- 如何获取3D矢量的剩余轴知道其他两个
- 查找 3D 点的两个交集的最佳方法::矢量
- 提升program_options:在 3D 矢量中读取作为命令行参数
- 特征:从 3D 矢量 c++ 中减去标量
- 1D 矢量 - 3D 索引