问题描述
基本上我有字符串形式的图像坐标。我有这 2 个字符串的向量,并且我正在使用一些分隔符解析它。解析正确完成,并且第一个 push_back 到 vector"" vector1 也是如此。但是,当我在 while 循环之后再次应用 push_back 将 vector1 存储在 vector">" vector2 中时(因为我想稍后构建多个 vector""s) vector2 的结果重复了 vector1[0] 2 次,答案是 123456123456789101112。我想要 123456789101112。
我做错了什么? 出于提问的目的,我自己构建了示例 vector"" 结果; 但我是从原始代码中的另一个函数中获取的。
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
size_t beg,pos = 0;
string s = "[[[1 2]] [[3 4]] [[5 6]]]";
string t = "[[[7 8]] [[9 10]] [[11 12]]]";
vector<string> resultvec;
resultvec.push_back(s);
resultvec.push_back(t);
string const delims{ "[] " };
vector<string> vector1;
vector<vector<string>> vector2;
for(int i=0; i<resultvec.size(); i++)
{
while ((beg = resultvec[i].find_first_not_of(delims,pos)) != string::npos)
{
pos = resultvec[i].find_first_of(delims,beg + 1);
{
vector1.push_back(resultvec[i].substr(beg,pos - beg));
//cout << resultvec[i].substr(beg,pos - beg) << endl;
}
}
beg = 0;
pos = 0;
vector2.push_back(vector1);
}
cout<<"==========vector1==============="<<endl;
for(int i = 0; i<vector1.size();i++)
{
cout<<vector1[i]<<endl;
}
cout<<"==========vector2==============="<<endl;
for(int i = 0; i < vector2.size(); i++)
{
for(int j = 0; j < vector2[i].size(); j++)
{
cout<<vector2[i][j]<<endl;
}
}
}
===========vector1================
1
2
3
4
5
6
7
8
9
10
11
12
===========vector2==============
1
2
3
4
5
6
1
2
3
4
5
6
7
8
9
10
11
12
我想要
===========vector1================
1
2
3
4
5
6
7
8
9
10
11
12
===========vector2==============
1
2
3
4
5
6
7
8
9
10
11
12
解决方法
我认为代码没有完全正确粘贴,但从我看来,我认为您在内循环中累积 vector1
,将其添加到外循环中的 vector2
,但永远不会重新开始对于 vector1
(或者是 r
?)。您不断追加到 vector1
中,它仍然包含以前的值。
在外循环的顶部添加一个 vector1.clear()
调用。
乍一看,您好像忘记在每次迭代前清除 vector1
。
要清除 vector1
,请在此处添加对 clear()
的调用:
for(int i=0; i<resulvec.size(); i++)
{
vector1.clear(); // add call to clear() here
while ((beg = resultvec[i].find_first_not_of(delims,pos)) != string::npos)
{
// omit
}
beg = 0;
pos = 0;
vector2.push_back(vector1);
}
但这实际上是错误的,现在输出将是:
===========vector1================
7
8
9
10
11
12
===========vector2==============
1
2
3
4
5
6
7
8
9
10
11
12
要获得想要的输出,您应该只将 vector1
推送到 vector2
一次以匹配来自 vector1
和 vector2
的输出。
它会是这样的:
for(int i=0; i<resulvec.size(); i++)
{
while ((beg = resultvec[i].find_first_not_of(delims,pos)) != string::npos)
{
// omit
}
beg = 0;
pos = 0;
// move this
// vector2.push_back(vector1);
}
// here
vector2.push_back(vector1);