我如何在二维向量中存储一些数组
how I can store some arrays in a 2 dimension vector?
我在每次迭代中都有一个循环,打印一个数组。 现在我需要这个数组,所以我想将它们放在二维向量中。我写了这段代码,但我不知道为什么它不起作用!
当我运行时,它不会打印任何东西,也不会显示任何错误!
int main() {
int i, u;
const int j = 9;
vector<vector<int>> V;
int B[9] = {};
for (int r = 0; r<10; r++) {
B[r] = 1;
for (int t = 0; t<V.size(); t++) {
for (int w = 0; w<j; w++, u++) {
V[t][w] = B[u];
}
}
}
for (int m = 0; m<V.size(); m++) {
for (int k = 0; k<j; k++) {
cout << "V=" << " " << V[m][k];
}
}
return 0;
}
例如,在每次迭代的第一个循环中,B 更改,我想将它们全部存储在一个矩阵中! 例如,我有:
第一次迭代:B=(1,0,0)
第二次迭代:B=(0,1,0)
第三次迭代:B=(0,0,1)
现在我想拥有:
V={{1,0,0},{0,1,0},{0,0,1}}
假设您有 N 个 int[N]
个值,并且需要 1 个vector<vector<int>>
值。
std::vector<int> fromArray(int (&B)[N])
{
return { std::begin(B), std::end(B) };
}
这是一个将一维数组转换为一维向量的函数。 您将需要调用它 N 次。
std::vector<std::vector<int>> fromArrays(int (&Bs)[N][N])
{
std::vector<std::vector<int>> result{ N };
std::transform(std::begin(Bs), std::end(Bs), result.begin(), fromArray);
return result;
}
在这里,我们采用一个 2D 数组并将其转换为 2D 矢量。这需要您同时拥有所有B
。
int main()
{
constexpr int N = 3;
std::vector<std::vector<int>> V;
for (int i = 0; i < N; ++i)
{
int B[N] = {};
B[i] = 1;
V.emplace_back(fromArray(B));
}
for (std::vector<int> & v : V)
{
for (int i : v)
{
std::cout << i << " ";
}
std::cout << "n";
}
return 0;
}
或者,如果您没有一次性完成所有B
,只需循环 N 次即可获得一个B
如果猜测,有一个我的实现:
int main() {
int len = 9;
int div = 3;
int total = len / div;
int B[len]={1, 0, 0, 0, 1, 0, 0, 0, 1};
vector<vector<int> > V(total);
int cnt = 0;
for (int i = 0; i < len && cnt < total; i += div) {
for (int j = i; j < i + div; j++) {
V[cnt].push_back(B[j]);
}cnt++;
}
for (int i = 0; i < total; i++) {
for (int j = 0; j < V[i].size(); j++) {
cout << V[i][j] << " ";
}cout << endl;
}
return 0;
}
V 是这样的:
1 0 0
0 1 0
0 0 1
你可能想要这个:
int main() {
const int Bsize = 9;
const int NumberOfLines = 4; // number of iterations
int B[Bsize] = { 1,2,3,4,5,6,7,8,9 };
vector<vector<int>> V;
V.resize(NumberOfLines);
int bIndex = 0;
for (int r = 0; r < NumberOfLines; r++) {
// add code that changes B here
V[r].resize(Bsize);
for (int w = 0; w < Bsize; w++) {
V[r][w] = B[w];
}
}
for (int m = 0; m < V.size(); m++) {
for (int k = 0; k < V[m].size(); k++) {
cout << " " << V[m][k];
}
cout << endl;
}
return 0;
}
在此示例中,我们将生成 4 行(每次迭代一行),但此处每次B
行都相同。如果希望 B 在每次迭代之间更改,则需要插入更改 B
的相应代码。
示例的输出将是:
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
相关文章:
- 访问存储在向量C++中的结构的多态成员
- 添加存储在向量中的大整数的函数出现问题
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 如何从用户那里获取输入并将其存储在向量中?
- 如何从文件中读取两个字符串和数字数组,并将它们存储在对象向量中
- 将无符号字符的向量存储在数组中会给我 std::bad_alloc
- 在二维向量或数组中可以存储的最大元素数是多少?
- 存储在堆分配向量中的指针的免费存储
- 将相同共享指针的副本存储在不同的向量中是否是一种好的做法?
- 将数组信息存储到 c++ 向量中有一个"Access violation reading location"
- Sqlite3:将数据库表名存储在向量中
- 如何在数组和向量 c++ 中存储和保存输入
- C++ 将抽象类型的动态分配对象传递给函数并存储在向量中
- 代码将向量存储为向量<vector>,为什么没有错误消息?
- 替代STD ::向量存储参考而不是对象的副本
- 将向量存储在<file> CStringArray 中?
- 将可变大小结构的向量存储在c++中的二进制文件中
- 使用向量c++存储和洗牌一副牌
- 将指针向量存储在文件中并再次读取它们
- 是否可以/建议将向量存储在结构中?C++