从c ++中的2d向量中的特定索引获取值

时间:2014-12-12 09:23:10

标签: c++ vector cocos2d-x cocos2d-x-3.0

我使用:

创建了一个二维矢量
 std::vector<std::vector<int> *> hp;

我想初始化hp vector并从特定索引中获取相同的数据。

for eg,
Getting the values from hp[2][2];

请帮忙

3 个答案:

答案 0 :(得分:1)

请注意

std::vector<std::vector<int>*> hp

定义了一个std :: vector,其中包含指向

类型对象的指针
std::vector<int>

正如ravi所说,你可能想要

std::vector<std::vector<int>> hp;

但是如果你坚持使用带指针的矢量,

std::vector<std::vector<int>*> hp;
(*hp[2])[2] // retrieves third value from third std::vector<int>

备注:在C ++ 11(也称为C ++ 0x)中,您不需要&#34;&gt;&#34;之间的间距。 (正如我在例子中写的那样)。

答案 1 :(得分:1)

尝试以下

#include <iostream>
#include <vector>

int main() 
{
    std::vector<std::vector<int> *> hp =
    {
        new std::vector<int> { 1, 2, 3 },
        new std::vector<int> { 4, 5, 6 }
    };

    for ( std::vector<std::vector<int> *>::size_type i = 0;
          i < hp.size(); i++ )
    {
        for ( std::vector<int>::size_type j = 0; j < hp[i]->size(); j++ )
        {
            std::cout << ( *hp[i] )[j] << ' ';
//          std::cout << hp[i]->operator[]( j ) << ' ';
        }
        std::cout << std::endl;
    }        

    for ( auto &v : hp ) delete v;

    return 0;
}

对于内循环中的注释和未注释语句,程序输出将是相同的,看起来像

1 2 3 
4 5 6 

答案 2 :(得分:0)

如果这些是指向其他地方拥有的载体的指针:

#include <vector>
#include <iostream>
#include <algorithm>
int main() {

    // Create owning vector
    std::vector<std::vector<int>> h = {{0,1,2},{3,4,5},{6,7,8}};

    // Create vector of pointers
    std::vector<std::vector<int>*> hp(h.size());
    //auto get_pointer = [](std::vector<int>& v){return &v;}; // C++11
    auto get_pointer = [](auto& v){return &v;};  // C++14
    std::transform(h.begin(), h.end(), hp.begin(), get_pointer);

    // Output value in third column of third row
    std::cout << (*hp[2])[2];
}