C++指针的困境

C++ Pointers Dilemma

本文关键字:困境 指针 C++      更新时间:2023-10-16

在过去的几个小时里,我一直在用C++玩指针
然后我陷入了困境。。。

vector<int> one[3]; 
vector<int>* two[3]; 
vector<vector<int> > three(3);
vector<int>** four = new vector<int>*[3];

我想创建一个包含3个整数向量的数组(或向量)

我认为我知道的(如果我错了,请纠正我):

  • ONE是一个由三个std::vector对象组成的数组(我想所有这些对象都是使用默认构造函数初始化的)
  • TWO是一个由三个std::矢量指针组成的数组。这意味着我必须动态地分配三个指针,如下所示:

    two[0] = new vector<int>();
    two[1] = new vector<int>();
    two[2] = new vector<int>();
    
  • THREE是一个向量,包含三个std::vector初始化的对象。

  • FOUR是指向三个std::矢量指针中第一个的指针

实现这一目标的最佳方式是什么(为什么?)

更新:

这是LLDB在打印这些变量时的输出
http://pastebin.com/raw.php?i=JLyeB4uK
听起来不对。。。

代码为:

//METHOD ONE: 
vector<int> one[3];  
//METHOD TWO:
vector<int>* two[3]; 
two[0] = new vector<int>();
two[1] = new vector<int>();
two[2] = new vector<int>();
//METHOD THREE: 
vector<vector<int> > three(3);
//METHOD FOUR:
vector<int>** four = new vector<int>*[3]; 
four[0] = new vector<int>();
four[1] = new vector<int>();
four[2] = new vector<int>();

感谢:)

我想创建一个数组(或向量),其中包含3个整数向量

std::array<std::vector<int>,3> myThreeVectors;

将是IMHO的最佳选择
不幸的是,这不适用于c++11之前的标准。作为代理,您可以最好地使用简单的c样式数组(任何像样的c++编译器都应该能够正确处理普通数组元素的类实例化):

std::vector<int> myThreeVectors[3] = { };

相当于

std::vector<int> myThreeVectors[3] = 
                    { std::vector<int>()
                    , std::vector<int>()
                    , std::vector<int>()
                    };

这是一个运行示例:

#include <iostream>
#include <vector>
using namespace std; // Don't use this in headers
std::vector<int> myThreeVectors[3] = { };
int main() {
    for(int i = 0; i < 3; ++i)
    {
        cout << "myThreeVectors[" << i << "].size() = " << 
                myThreeVectors[i].size() << endl;
    }
    return 0;
}

您使用的LLDB是什么版本?

使用TOT,我得到:

(std::__1::vector>[3])one={

[0]=大小=0{}

[1] =size=0{}

[2] =size=0{}

}

(std::__1::vector>*[3])二={

[0]=0x00000001001039a0大小=0

[1] =0x00000001001039c0大小=0

[2] =0x00000001001039e0大小=0

}

(std::_1::vector_1::vector>,std::__1::分配器>>)三=大小=3{

[0]=大小=0{}

[1] =size=0{}

[2] =size=0{}

}

(std::__1::vector>**)四=0x0000000100103980大小=0