我有以下构造。
数组arr
:
std::array<double, 2> val;
我通过push_back()
将其放入向量中
std::vector<std::array<double, 2>> innerVec;
for(int i=0; i<number1; i++){
innerVec.push_back(val);
}
再次,我将此内部向量放入外部向量:
std::vector<std::vector<std::array<double, 2>>> outerVec;
for(int i=0; i<number2; i++){
outerVec.push_back(innerVec);
}
问题是,如何获得number1
的大小(实际上是指innerVec
)?
与
outerVec[0].size();
它返回2*number1
,这可能是因为val
有2个条目,而size()
返回了内部向量中的元素数。
答案 0 :(得分:0)
在像这样的锯齿状向量构造中,outerVec.size()
和outerVec[0].size()
可以达到目的:
#include <vector>
#include <array>
#include <iostream>
int main()
{
int number1 = 3;
int number2 = 5;
std::array<double, 2> val;
std::vector<std::array<double, 2>> innerVec;
for (int i = 0; i < number1; i++) {
innerVec.push_back(val);
}
std::vector<std::vector<std::array<double, 2>>> outerVec;
for (int i = 0; i < number2; i++) {
outerVec.push_back(innerVec);
}
std::cout << "number1: " << outerVec[0].size() << std::endl;
std::cout << "number2: " << outerVec.size() << std::endl;
}
它返回
2*number1
,可能是因为val
有2个条目
否,您使用val
获得了outerVec[0][0].size()
的大小。
答案 1 :(得分:0)
很明显,向量的维数是[number2][number1][2]
。
这是一个演示程序。
#include <iostream>
#include <array>
#include <vector>
int main()
{
const size_t number1 = 10;
const size_t number2 = 5;
std::vector<std::vector<std::array<double,2>>> v =
{ number2, std::vector<std::array<double, 2 >>( number1 ) };
std::cout << "v.size() = " << v.size() << '\n';
std::cout << "v[0].size() = " << v[0].size() << '\n';
std::cout << "v[0][0].size() = " << v[0][0].size() << '\n';
return 0;
}
其输出为
v.size() = 5
v[0].size() = 10
v[0][0].size() = 2
答案 2 :(得分:0)
好吧
如您所愿,你们都是正确的^^
错误很愚蠢,我只是按如下方式启动innerVec:
std::vector<array<double, 2>> innerVec(number1)
然后通过push_back()将number1个val元素再次放入innerVec。当然,这导致2 * number1个val元素。愚蠢的错误...
因此,给您带来的不便,我们深表歉意。感谢所有帮助我们的人。
问候