我有这段代码。
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
}
如何获取每个向量的数组内的值?
答案 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 ];