我正在尝试创建设置大小的2d向量,然后将数据插入其中。我遇到的问题是能够插入填充2d向量中每一行的数据。
我已经阅读了其他各种线程,但是找不到适合我的实现。
以下是我的问题的示例代码:
int main()
{
vector<string> strVec = { "a","b","c","d" };
// letters to insert into vector
// this is just a sample case
vector< vector<string>> vec; // 2d vector
int cols = 2; // number of columns
int rows = 2; // number of rows
for (int j = 0; j < cols; j++) // inner vec
{
vector<string>temp; // create a temporary vec
for (int o = 0; o < rows; o++) // outer vec
{
temp.push_back("x"); // insert temporary value
}
vec.push_back(temp); // push back temp vec into 2d vec
}
// change each value in the 2d vector to one
// in the vector of strings
// (this doesn't work)
// it only changes the values to the last value of the
// vector of strings
for (auto &v : strVec)
{
for (int i = 0; i < vec.size(); i++)
{
for (int j = 0; j < vec[i].size(); j++)
{
vec[i][j] = v;
}
}
}
// print 2d vec
for (int i = 0; i < vec.size(); i++)
{
for (int j = 0; j < vec[i].size(); j++)
{
cout << vec[i][j];
}
cout << endl;
}
}
答案 0 :(得分:1)
您正在循环vec
中一次又一次地向for (auto &v : strVec)
的所有元素分配相同的字符串。
即vec[0][0]=vec[0][1]=vec[1][0]=vec[1][1]=a
,vec[0][0]=vec[0][1]=vec[1][0]=vec[1][1]=b
,依此类推。
删除此外部循环并将strVec[i*cols+j]
分配给vec[i][j]
,我们可以获得所需的输出。
for (int i = 0; i < vec.size(); i++)
{
for (int j = 0; j < vec[i].size(); j++)
{
vec[i][j] = strVec[i*cols+j];
}
}
答案 1 :(得分:0)
for (int i = 0; i < vec.size(); i++)
{
for (int j = 0; j < 2; j++)
{
cout << vec[i][j];
}
cout << endl;
}