繁体   English   中英

打印二维向量的内容

[英]printing contents of 2d vector

这是我正在运行的代码:

std::vector<std::vector<double>> test;
test.push_back(std::vector<double>(30));

 std::vector<std::vector<double> >::iterator it=test.begin(), end=test.end();
    while (it!=end) {
      std::vector<double>::iterator it1=it->first.begin(),end1=it->first.end();
      while (it1!=end1) {
    std::copy(it1.begin(),it1.end(),std::ostream_iterator<double>(std::cout, " "));
    ++it1;
      }
      ++it;
    }

这是我得到的编译错误:

data.cpp:33:45: error: ‘class std::vector<double>’ has no member named ‘first’
data.cpp:33:68: error: ‘class std::vector<double>’ has no member named ‘first’
data.cpp:35:16: error: ‘class std::vector<double>::iterator’ has no member named ‘begin’
data.cpp:35:28: error: ‘class std::vector<double>::iterator’ has no member named ‘end’
data.cpp:35:34: error: ‘ostream_iterator’ is not a member of ‘std’
data.cpp:35:56: error: expected primary-expression before ‘double'

关于如何修复它的任何建议,以便我可以打印测试的内容

代码有两个问题。

第一个 std::vectors不包含std::pairs ,因此没有firstsecond

while (it!=end) {
  std::vector<double>::iterator it1=it->begin(),end1=it->end();

其次 ,对std::copy的调用包含一个范围,该范围可能应该对应于您的内部向量之一。 因此,您的层次太深了。

您可以遍历外部向量test ,然后对其每个元素(作为向量)使用copy进行打印。

std::vector<std::vector<double>> test;
test.push_back(std::vector<double>(30));
std::vector<std::vector<double> >::iterator it=test.begin(), end=test.end();
for ( it!= end, ++it) {
  std::copy(it1-begin(),it->end(),std::ostream_iterator<double>(std::cout, " "));
}

我认为这更是您想要的。

std::vector<std::vector<double>> test;
// Put some actual data into the test vector of vectors
for(int i = 0; i < 5; ++i)
{
    std::vector<double> random_stuff;
    for(int j = 0; j < 1 + i; ++j)
    {
        random_stuff.push_back(static_cast<double>(rand()) / RAND_MAX);
    }
    test.push_back(random_stuff);
}

std::vector<std::vector<double> >::iterator it=test.begin(), end=test.end();
while (it!=end) 
{
    std::vector<double>::iterator it1=it->begin(),end1=it->end();
    std::copy(it1,end1,std::ostream_iterator<double>(std::cout, " "));
    std::cout << std::endl;
    ++it;
}

您不需要第一个,因为向量不包含对,也不需要基于it1和end1进行循环,因为它们表示传递给您的复制范围。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM