V2的值并非正确
the values of v2 is not coming out to be correct
本文关键字:V2 更新时间:2023-10-16
我正在尝试显示v2的值。如果运行代码,则可以看到V2的第一个值是正确的,但是第二个值只是对第一个值的重复。我已经使用了向量的向量作为我的代码。我在这里与列矢量打交道。如果您能让我知道我的错误,我会很感激。
#include <iostream>
#include <vector>
using namespace std;
vector<vector<int> > set_val(int M)
{
vector<vector<int> > v1(M, vector<int> (1));
for(int i=0;i<M;i++)
{
for(int j=0;j<1;j++)
{
cin>>v1[i][j];
}
}
return v1;
}
vector<vector<int> > cal_val(int M, vector<vector<int> > &v1)
{
vector<vector<int> > v2;
vector<int> temp;
for(int i=0;i<M;i++)
{
for(int j=0;j<1;j++)
{
temp.push_back(v1[i][j]-1);
}
v2.push_back(temp);
}
//display v2
for(int i=0;i<M;i++)
{
for(int j=0;j<1;j++)
{
cout<<"v2["<<i<<"]["<<j<<"]: "<<v2[i][j]<<endl;
}
}
return v2;
}
int main()
{
int M;
cout<<"Enter data: ";
cin>>M;
vector<vector<int> > v1(M, vector<int> (1));
vector<vector<int> > v2(M, vector<int> (1));
v1=set_val(M);
v2=cal_val(M,v1);
return 0;
}
从 cal_val
函数中的线 for(int j=0;j<1;j++)
中,我推断出您希望 v2
也是每个都有大小 1
的向量的向量。因此,我认为在代码的这一部分中添加temp.clear();
for(int i=0;i<M;i++)
{
temp.clear();
for(int j=0;j<1;j++)
{
temp.push_back(v1[i][j]-1);
}
v2.push_back(temp);
}
应该解决问题。原因是否则,您将反复附加到temp
,因此它将不再具有尺寸1
,请注意,您通常不应该传递向量的向量的副本,但是您应该将它们作为参考或使用来传递。移动语义。
此外,我不同意其他一些答案,这些答案主张在for
循环的每个迭代中创建一个新的temp
对象。这是因为clear()
比创建对象要快(您避免通过每个循环中的强制器/破坏者,并且也不会分配尽可能多的内存,请参阅此问题。有关该主题的讨论(。
您需要在每个循环中制作新的temp
矢量。更改
vector<vector<int> > v2;
vector<int> temp;
for(int i=0;i<M;i++)
{
for(int j=0;j<1;j++)
{
temp.push_back(v1[i][j]-1);
}
v2.push_back(temp);
}
to
vector<vector<int> > v2;
for(int i=0;i<M;i++)
{
vector<int> temp; //<--- moved here
for(int j=0;j<1;j++)
{
temp.push_back(v1[i][j]-1);
}
v2.push_back(temp);
}
请不要混合您的代码并将其简化为可读性。
您可以在主循环中创建向量,并将其作为&amp; v1传递到set_val作为参数。例如,将其填充并返回错误代码。
不要以1个简单使用v1 [i] [0]。
的写入循环将v2作为参数&amp; v2传递到calc_val,然后像v2 [i] [0] = v1 [i] [0] - 1。删除温度向量。
例如
#include <iostream>
#include <vector>
using namespace std;
int set_val(
int M,
vector< vector<int> > &v1
) {
if(M <= 0) {
return -1;
}
for(int i = 0; i < M; i++) {
cout << "Enter value for v1[" << i << "][0] : ";
cin >> v1[i][0];
}
return 0;
}
int calc_val(
int M,
vector< vector<int> > &v1,
vector< vector<int> > &v2
) {
if (M <= 0) {
return -1;
}
for(int i = 0; i < M; i++) {
v2[i][0] = v1[i][0] - 1;
}
for(int i = 0; i < M; i++) {
cout << "v2[" << i << "][0] = " << v2[i][0];
}
return 0;
}
int main()
{
int M;
cout << "Enter size of vector : ";
cin >> M;
vector< vector<int> > v1(M, vector<int> (1));
vector< vector<int> > v2(M, vector<int> (1));
int ret = set_val(M, v1);
if (ret == -1) {
cout << "Parameter M error.";
} else {
ret = calc_val(M, v1, v2);
if (ret == -1) {
cout << "Parameter M error.";
}
}
return 0;
}
如果这起作用,则可以将其扩展以支持多个向量维度。
相关文章:
- 没有找到相关文章