用c++迭代二维向量

iterate on 2D vector with C++

本文关键字:二维 向量 c++ 迭代      更新时间:2023-10-16

我已经好几年没有使用C/c++了,我正试图复习基础知识,我有一个问题要迭代3D向量:

#include        <string>
#include        <vector>
#include        <iterator>
int                                             main() {
  std::vector< std::vector<std::string> >       container;
  std::vector<std::string>                      table;
  std::string                                   line;
  for (int container_it = 0; container_it < 2; container_it++) {
    for (int table_it = 0;  table_it < 5 ; table_it++) {
      line = "TEST";
      table.push_back(line);
    }
    container.push_back(table);
  }

  for (std::vector< std::vector<std::string> >::iterator container_it = container.begin(); container_it != container.end(); container_it++)
    for (std::vector<std::string>::iterator it = (*container_it)->begin(); it != (*container_it)->end(); it++)
      std::cout << *it << std::endl;
}

我得到错误:

base operand of ‘->’ has non-pointer type ‘std::vector<std::basic_string<char> >’
base operand of ‘->’ has non-pointer type ‘std::vector<std::basic_string<char> >’

我同意chris的观点,我在这里只看到了2个维度,代码有一些语法错误,但它看起来像这一行:

for (std::vector<std::string>::iterator it = (*container_it)->begin(); it != (*container_it)->end(); it++)
应:

for (std::vector<std::string>::iterator it = (*container_it).begin(); it != (*container_it).end(); it++)

或更简单:

for (std::vector<std::string>::iterator it = container_it->begin(); it != container_it->end(); it++)