【问题标题】:invalid vector <T> subscript无效向量 <T> 下标
【发布时间】:2012-12-23 23:17:31
【问题描述】:

我正在尝试制作一个二维向量,其中 0 和 1 坐标都是复数,定义向量似乎工作正常,但是当我尝试访问它时,我收到一个错误带有大量乱码的新标签,但其中某处显示矢量下标无效。 (删节的)代码是

#include <iostream>     
#include <vector>
#include <complex>
using namespace std;
int main() 
{
vector<vector<complex<double>>> rho;
for(int g = 0; g < 4; ++g){
    for(int h = 0; h < 4; ++h){
        rho.push_back(vector<complex<double>>(2));
        rho.at(g).at(h) = 0;
        cout << rho.at(g).at(h)<<endl;
    }
}
}

任何帮助将不胜感激:) xx

【问题讨论】:

    标签: c++ visual-studio-2010 vector complex-numbers subscript


    【解决方案1】:

    6 年前提出的问题。

    有一个无效的下标,因为您有一个包含内部向量的外部向量。您的外部向量在内循环上添加了一个新向量,因此您将许多大小为 2 的向量推回,h 的范围从 0 到 3,并且 2 和 3 是所有内部向量的无效下标。

    不幸的是,这是那些“无用的无上下文”错误之一。如果它至少说“大小为 2 的向量的下标 2 无效”会更有用

    【讨论】:

      【解决方案2】:

      我认为对于 C++,尖括号需要用空格分隔。 当我这样做时,代码会按原样工作。看看这个

      #include <iostream>
      #include <vector>
      #include <complex>
      using namespace std;
      
      int main()
      {
          int g = 0;
          int h = 0;
          vector<vector<complex<double > > > rho;
          rho.push_back(vector<complex<double > >(2));
          rho.at(g).at(h) = 0;
          cout << rho.at(g).at(h)<<endl;
      }
      

      【讨论】:

      • 你是对的;这个缺陷应该在 C++11 中得到修复,但大多数编译器还没有默认启用 C++11。
      • 我认为其他地方出了点问题,我已将您的代码复制到一个新项目中,它工作正常(有或没有空格)。谢谢你:) xx
      • omg,我刚刚意识到我是最大的白痴,我将维数设置为 2,然后尝试写入第 4 维 DUUUH
      猜你喜欢
      • 2020-09-19
      • 1970-01-01
      • 2013-05-06
      • 1970-01-01
      • 1970-01-01
      • 2016-04-03
      • 1970-01-01
      • 2014-01-03
      • 2020-01-01
      相关资源
      最近更新 更多