操作向量和结构的元素

  • 本文关键字:元素 结构 向量 操作 c++
  • 更新时间 :
  • 英文 :


为了理解更困难的过程和向量操作,我决定做一个非常简单的例子。我有一个向量,它有结构类型。结构依次有3个数组:a, b, c。我填充它们,然后尝试打印结构中第一个数组的元素。但我做错了什么,不知道具体是什么,也许是一切。下面是代码:

using namespace std;
struct hl {
    int a [3];
    int b [3];
    int c [3];
};
int main()
{
  vector<hl> vec;
  struct hl he;
  for (int i = 0; i!=3; ++i) {
      int aa = 12;
      int bb = 13;
      int cc = 14;
      he.a[i]= aa+i;
      cout <<"Hello.a["<< i << "]=  "<<he.a[i]<<endl;
      he.b[i]= bb+i;
      he.c[i]= cc+i;
  }
  for (std::vector<hl>::iterator it = vec.begin() ; it != vec.end(); ++it) {
    //print arr.a[n]
  }
  return 0;
}

在填充结构体数组的循环之后添加以下语句

vec.push_back( he );

,然后输出vector

中包含的结构体的第一个数组的元素。
for ( int x : vec[0].a ) std::cout << x << ' ';
std::cout << std::endl;

或者你可以写

for ( const hl &he : vec )
{
   for ( int x : he.a ) std::cout << x << ' ';
   std::cout << std::endl;
}  

或者可以显式地使用vector

的迭代器
for ( std::vector<h1>::iterator it = vec.begin(); it != vec.end(); ++it )
{
   for ( size_t i = 0; i < sizeof( it->a ) / sizeof( *it->a ); i++ )
   {
      std::cout << it->a[i] << ' ';
   }
   std::cout << std::endl;
}

代替语句

for ( std::vector<h1>::iterator it = vec.begin(); it != vec.end(); ++it )

你也可以写

for ( auto it = vec.begin(); it != vec.end(); ++it )

您没有将元素he添加到向量中。你需要做

vec.push_back(he);

迭代应该是这样的:

for(std::vector<hl>::iterator it = vec.begin(); it != vec.end(); ++it) {
    std::cout << it->a[0] << ", " << it->a[1] << ", " << it->a[2] << std::endl;
}

同样,在c++中,你不需要在struct/class变量声明前加上struct关键字。这是C风格。你只需要:

hl he;

最新更新