Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 输出2d向量的语法_C++_Vector - Fatal编程技术网

C++ 输出2d向量的语法

C++ 输出2d向量的语法,c++,vector,C++,Vector,假设我有一个Int的2d向量: vector <vector<Int> > myV; 我想知道当我像矩形一样输出myV时:遍历myV[something][something],哪个变量应该在左括号中,哪个应该在右括号中?我只是想让变量完全符合我的意图 我还编写了一个测试代码,但它有分段错误,我还没有弄清楚原因 #include <iostream> #include <vector> using namespace std; int mai

假设我有一个Int的2d向量:

vector <vector<Int> > myV;
我想知道当我像矩形一样输出myV时:遍历myV[something][something],哪个变量应该在左括号中,哪个应该在右括号中?我只是想让变量完全符合我的意图

我还编写了一个测试代码,但它有分段错误,我还没有弄清楚原因

#include <iostream>
#include <vector>

using namespace std;

int main(){
  vector<vector<int> > myV;

  for (int i = 0; i < 3; i++){
      for (int j = 0; j < 3; j++){
          myV[i][j] = j;
  }
for (int i = 0; i < 3; i++){
    for (int j = 0; j < 3; j++)
        cout << myV[i][j] << " ";
    cout << endl;}
}
#包括
#包括
使用名称空间std;
int main(){
载体myV;
对于(int i=0;i<3;i++){
对于(int j=0;j<3;j++){
myV[i][j]=j;
}
对于(int i=0;i<3;i++){
对于(int j=0;j<3;j++)

cout代码无法运行的原因是您没有为向量分配任何内存。请将向量的声明更改为:

vector<vector<int>> myV(3, vector<int>(3));
此函数的用法可能如下所示:

for (int i = 0; i < 3; ++i)
{
    for (int j = 0; j < 3; ++i)
    {
        myV[getIndex(3, i, j)] = /* Value */;
    }
}
for(int i=0;i<3;++i)
{
对于(int j=0;j<3;++i)
{
myV[getIndex(3,i,j)]=/*值*/;
}
}
这将避免多维向量所需的大量内存使用,并允许以几乎相同的方式使用


以下是一些关于为什么应该使用1d数组来表示2d数组的详细信息。

代码无法工作的原因是您没有为向量分配任何内存。请将向量的声明更改为:

vector<vector<int>> myV(3, vector<int>(3));
此函数的用法可能如下所示:

for (int i = 0; i < 3; ++i)
{
    for (int j = 0; j < 3; ++i)
    {
        myV[getIndex(3, i, j)] = /* Value */;
    }
}
for(int i=0;i<3;++i)
{
对于(int j=0;j<3;++i)
{
myV[getIndex(3,i,j)]=/*值*/;
}
}
这将避免多维向量所需的大量内存使用,并允许以几乎相同的方式使用


这里有一些关于为什么应该使用1d数组来表示2d数组的更多信息。

不相关的战术说明:像这样一个非常小的2d结构将由于缺乏空间位置而受到很大的影响,因为它不是一个
向量
,实际上是4个
向量
,它们可能分散在内存中Y.如果你有一个或两个,而且很少使用,谁在乎呢?但是如果你对3x3矩阵进行大量操作,你将花费大量时间等待缓存。听起来很傻,你最好制作大小为9的1
向量,自己用
行*num_列+列
进行索引像这样一个非常小的2D结构会因为缺少空间局部性而受到很大的影响,因为它不是一个
向量
,它实际上是4个
向量
,它们可能分散在内存中。如果你有一个或两个,而且你很少使用它,谁在乎呢?但是如果你对3x3矩阵进行了大量的操作,你就我们将花费大量时间等待缓存。虽然听起来很傻,但最好制作大小为9的1
vector
,并使用
row*num\u columns+column