如何创建二维字符串向量并在其中插入数据?
How to create 2D string vector and insert Data in it?
我有几个以数字结尾的字符串:
说:abc_0_0 xyz_1_0 dfg_0_1 asd_2_0 ghj_0_2 iop_2_1 hkk_1_1asv_2_2
我可以一次读取它们,根据末尾的数字,我需要创建一个 2D 向量并将字符串元素插入到数字给出的索引处。
因此,对于给定的字符串:索引 [0][0] 应该有 abc,索引 [1][0] 应该有 xyz,索引 [0][1] 应该有 dfg,索引 [2][0] 应该有 asd,索引 [0] [2] 应该有 ghj,索引 [2][1] 应该有 iop,索引 [1][1] 应该有 hkk,索引[2][2]应该有asv.
如何实施?我不知道 vector
的实现
#include <cstring>
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int main(void)
{
int maxentry;
vector <vector <string>> Data;
string s;
char a;
int c,d;
cin >> maxentry;
for(int j=0; j<maxentry; j++)
{
cin >> s;
a=s[4];
cout << s[4] << endl;
cout << a <<endl;
c = int (s[4])-int ('0');
d = int (s[6])-int ('0');
cout<< "Value: " <<c << " " << d << endl;
Data[c][d]=s; //Doesn't work here
}
return 0;
}
你的问题是 std::vector 是动态结构,这意味着它会改变大小。在调用 vector 的默认构造函数后,其大小为 0。这意味着您的二维数组为空。一种可能的实现是,只要您没有足够的 space 用于相应的索引,您就 resize 它:
for(int j=0; j<maxentry; j++)
{
// ...
c = int (s[4])-int ('0');
d = int (s[6])-int ('0');
if (Data.size() <= c)
Data.resize(c + 1); // not enough space -> resize needed
if (Data[c].size() <= d )
Data[c].resize(d + 1); // not enough space -> resize needed
// ...
}
如果您不想调整大小并且您知道您不需要比假设 10x10 更大的二维数组,您可以使用 std::array 代替:
array< array< string, 10 >, 10 > Data;
我有几个以数字结尾的字符串: 说:abc_0_0 xyz_1_0 dfg_0_1 asd_2_0 ghj_0_2 iop_2_1 hkk_1_1asv_2_2 我可以一次读取它们,根据末尾的数字,我需要创建一个 2D 向量并将字符串元素插入到数字给出的索引处。
因此,对于给定的字符串:索引 [0][0] 应该有 abc,索引 [1][0] 应该有 xyz,索引 [0][1] 应该有 dfg,索引 [2][0] 应该有 asd,索引 [0] [2] 应该有 ghj,索引 [2][1] 应该有 iop,索引 [1][1] 应该有 hkk,索引[2][2]应该有asv.
如何实施?我不知道 vector
的实现#include <cstring>
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int main(void)
{
int maxentry;
vector <vector <string>> Data;
string s;
char a;
int c,d;
cin >> maxentry;
for(int j=0; j<maxentry; j++)
{
cin >> s;
a=s[4];
cout << s[4] << endl;
cout << a <<endl;
c = int (s[4])-int ('0');
d = int (s[6])-int ('0');
cout<< "Value: " <<c << " " << d << endl;
Data[c][d]=s; //Doesn't work here
}
return 0;
}
你的问题是 std::vector 是动态结构,这意味着它会改变大小。在调用 vector 的默认构造函数后,其大小为 0。这意味着您的二维数组为空。一种可能的实现是,只要您没有足够的 space 用于相应的索引,您就 resize 它:
for(int j=0; j<maxentry; j++)
{
// ...
c = int (s[4])-int ('0');
d = int (s[6])-int ('0');
if (Data.size() <= c)
Data.resize(c + 1); // not enough space -> resize needed
if (Data[c].size() <= d )
Data[c].resize(d + 1); // not enough space -> resize needed
// ...
}
如果您不想调整大小并且您知道您不需要比假设 10x10 更大的二维数组,您可以使用 std::array 代替:
array< array< string, 10 >, 10 > Data;