在c ++中访问vector中的数组

时间:2015-10-01 19:35:37

标签: c++ arrays vector

我有这段代码。

std::vector<int> aVector;
int anArray[2];
unsigned anArraySize = sizeof(anArray) / sizeof(int);
for (unsigned int j = 0; j < 100; j += 10) {
    for (unsigned int i = 0; i < 100; i += 3) {
        anArray[0] = j;
        anArray[1] = i;
        aVector.insert(aVector.end(), &anArray[0], &anArray[anArraySize]);
    }
}

它基本上是将一个大小为2的数组(0,1)插入到名为ijVector的向量中。

现在,我想为aVector中的每个值访问anArray [0]和anArray [1]中的anArray值。

例如,像

for (int i = 0; i --> aVector.size() - 1;) {
    std::cout << "aVector[" << i << "].anArray[0] = " << aVector.anArray[0] << std::endl; // getting value is wrong
    std::cout << "aVector[" << i << "].anArray[1] = " << aVector.anArray[1] << std::endl; // getting value is wrong
}

如何获取每个向量的数组内的值?

5 个答案:

答案 0 :(得分:3)

为什么不使用std::pair

你可以这样做:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    typedef std::pair<int,int> intPair;
    typedef std::vector<intPair> intPairVec;
    intPairVec aVector;  

    for (unsigned int j = 0; j < 100; j += 10) {
        for (unsigned int i = 0; i < 100; i += 3) {
            aVector.push_back(std::make_pair(j,i));
        }
    }
    int i=0;
    for (intPairVec::iterator it = aVector.begin(); it != aVector.end();it++) {
        std::cout << "aVector[" << i << "].1st = " << it->first << std::endl;
        std::cout << "aVector[" << i << "].2nd = " << it->second<< std::endl; 
        i++;
    }
    return 0;
}

答案 1 :(得分:2)

你可能想要

for (unsigned int i = 0; i != aVector.size(); ++i) {
    std::cout << "aVector[" << i << "].anArray[0] = " << aVector[i][0] << std::endl;
    std::cout << "aVector[" << i << "].anArray[1] = " << aVector[i][1] << std::endl;
}

以后

{{1}}

答案 2 :(得分:2)

问题是你的向量是int的向量,而不是长度为2的数组的向量。你的数组可以合理地定义和填充如下:

std::vector<std::array<int, 2> > aVector;
for (unsigned int j = 0; j < 100; j += 10) {
    for (unsigned int i = 0; i < 100; i += 3) {
        std::array<int, 2> a = {j, i};
        aVector.push_back(a);
    }
}

这样你就可以调用表格

aVector[x][y]

答案 3 :(得分:1)

每个偶数索引是一个数组的第一个元素,每个奇数索引是数组的第二个元素。数组中的元素数量是您假设的两倍。

此代码应该有效:

for (int i = 0; i < aVector.size(); ++i) {
    std::cout << "aVector[" << i << "].anArray[0] = " << aVector.at(i/2) << std::endl;
    std::cout << "aVector[" << i << "].anArray[1] = " << aVector.at(i/2+1) << std::endl;
}

答案 4 :(得分:1)

声明为std::vector<int> aVector;的向量不包含每个为2个整数的数组,而是包含整数元素。在向量aVector内,你不会有2个元素的较小数组,只有整数。

一种可能性是一个接一个地添加数组的元素

for (int i = 0; i < aVector.size()/2; ++i)
{
    std::cout << "aVector[" << i << "].anArray[0] = " << aVector.at(2*i) << std::endl;
    std::cout << "aVector[" << i << "].anArray[1] = " << aVector.at(2*i+1) << std::endl;
}

请注意,您不能使用STL声明

Can i push an array of int to a C++ vector?Correct way to work with vector of arrays中所述。

另外请注意,这是获得数组大小的正确而奇特的方法。

int anArray[2];
unsigned anArraySize = sizeof(anArray) / sizeof(int);

我建议改用

const unsigned int anArraySize = 2;
int anArray[anArraySize ];