将提取的字符存储在字符串向量中
storing extracted characters in a vector of strings
如果考虑转换,我应该能够合理地将 char
存储在 std::vector
个字符串中。
这里是尝试:
vector<string> f (vector<string> input)
{
vector<string> output;
for (int i=0; i<input.size(); i++) // vector iteration
{
for (int j=0;j<input[i].size(); j++) // string iteration
{
output.push_back(string(input[i].at(j))); // access to characters
}
}
return output;
}
input[i]
是一个string
,input[i].at(j)
是一个char
;因此,在推送到 vector<string>
.
之前,我已将其转换为 string
我想知道这种方法有什么问题。特别是,编译器的错误对我来说是无法理解的:
invalid conversion from '__gnu_cxx::__alloc_traits<std::allocator<char> >::value_type {aka char}' to 'const char*' [-fpermissive]
编辑:
f
必须按如下方式工作。
假设input
向量中有3个字符串:{abcd,efdr,loab}
;然后,output
应提取所有原子字符,如:{abcdefdrloab}
更正您的错误更改
output.push_back(string(&input[i].at(j)));
来自
output.push_back(string(input[i].at(j)));
基本上
**for (int i=0; i<input.size(); i++) \vector iteration**
这是一种错误的迭代方式。对于容器迭代器应该用于迭代
下面从一个向量复制字符串(使用迭代器和 stl,您可以使用 copy_if 或 lambda)
#include <iostream>
#include <iterator>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
vector<string> f (vector<string> input)
{
vector<string> output;
copy(input.begin(),input.end(),back_inserter(output));
return output;
}
int main()
{
vector<string> h{"hello"},x;
x=f(h);
copy(x.begin(),x.end(),ostream_iterator<string>(cout," "));
}
输出
hello Program ended with exit code: 0
但要回答您的问题并修复您的代码
下面是修改后的代码
#include <iostream>
#include <iterator>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
vector<string> f (vector<string> input)
{
vector<string> output;
for (int i=0; i<input.size(); i++)
{
for (int j=0;j<input[i].size(); j++)
{
output.push_back(string(&input[i].at(j)));
}
}
return output;
}
vector<string> fi (vector<string> input)
{
vector<string> output;
copy(input.begin(),input.end(),back_inserter(output));
return output;
}
int main()
{
vector<string> h{"hello"},x,y;
x=fi(h);
y=f(h);
copy(x.begin(),x.end(),ostream_iterator<string>(cout," "));
copy(y.begin(),y.end(),ostream_iterator<string>(cout," "));
}
输出
hello hello ello llo lo o Program ended with exit code: 0
修改后的解决方案
#include <iostream>
#include <iterator>
#include<vector>
#include<string>
#include<algorithm>
#include <numeric>
using namespace std;
template<typename T, typename... Args>
void push_back_vec(std::vector<T>& v, Args&&... args)
{
(v.push_back(args), ...);
}
int main()
{
vector<string>x;
push_back_vec(x, "abc", "cds", "ma");
string a = accumulate(x.begin(), x.end(), string(""));
cout<<a;
}
输出
abccdsmaProgram ended with exit code: 0
更简单的格式
#include <iostream>
#include <iterator>
#include<vector>
#include<string>
#include<algorithm>
#include <numeric>
using namespace std;
int main()
{
vector<string>x{"abc", "cds", "ma"},a;
a.push_back(accumulate(x.begin(), x.end(), string("")));
copy(a.begin(),a.end(),ostream_iterator<string>(cout," "));
}
试试这个 string(1, input[i].at(j))
如果考虑转换,我应该能够合理地将 char
存储在 std::vector
个字符串中。
这里是尝试:
vector<string> f (vector<string> input)
{
vector<string> output;
for (int i=0; i<input.size(); i++) // vector iteration
{
for (int j=0;j<input[i].size(); j++) // string iteration
{
output.push_back(string(input[i].at(j))); // access to characters
}
}
return output;
}
input[i]
是一个string
,input[i].at(j)
是一个char
;因此,在推送到 vector<string>
.
string
我想知道这种方法有什么问题。特别是,编译器的错误对我来说是无法理解的:
invalid conversion from '__gnu_cxx::__alloc_traits<std::allocator<char> >::value_type {aka char}' to 'const char*' [-fpermissive]
编辑:
f
必须按如下方式工作。
假设input
向量中有3个字符串:{abcd,efdr,loab}
;然后,output
应提取所有原子字符,如:{abcdefdrloab}
更正您的错误更改
output.push_back(string(&input[i].at(j)));
来自
output.push_back(string(input[i].at(j)));
基本上
**for (int i=0; i<input.size(); i++) \vector iteration**
这是一种错误的迭代方式。对于容器迭代器应该用于迭代
下面从一个向量复制字符串(使用迭代器和 stl,您可以使用 copy_if 或 lambda)
#include <iostream>
#include <iterator>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
vector<string> f (vector<string> input)
{
vector<string> output;
copy(input.begin(),input.end(),back_inserter(output));
return output;
}
int main()
{
vector<string> h{"hello"},x;
x=f(h);
copy(x.begin(),x.end(),ostream_iterator<string>(cout," "));
}
输出
hello Program ended with exit code: 0
但要回答您的问题并修复您的代码
下面是修改后的代码
#include <iostream>
#include <iterator>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
vector<string> f (vector<string> input)
{
vector<string> output;
for (int i=0; i<input.size(); i++)
{
for (int j=0;j<input[i].size(); j++)
{
output.push_back(string(&input[i].at(j)));
}
}
return output;
}
vector<string> fi (vector<string> input)
{
vector<string> output;
copy(input.begin(),input.end(),back_inserter(output));
return output;
}
int main()
{
vector<string> h{"hello"},x,y;
x=fi(h);
y=f(h);
copy(x.begin(),x.end(),ostream_iterator<string>(cout," "));
copy(y.begin(),y.end(),ostream_iterator<string>(cout," "));
}
输出
hello hello ello llo lo o Program ended with exit code: 0
修改后的解决方案
#include <iostream>
#include <iterator>
#include<vector>
#include<string>
#include<algorithm>
#include <numeric>
using namespace std;
template<typename T, typename... Args>
void push_back_vec(std::vector<T>& v, Args&&... args)
{
(v.push_back(args), ...);
}
int main()
{
vector<string>x;
push_back_vec(x, "abc", "cds", "ma");
string a = accumulate(x.begin(), x.end(), string(""));
cout<<a;
}
输出
abccdsmaProgram ended with exit code: 0
更简单的格式
#include <iostream>
#include <iterator>
#include<vector>
#include<string>
#include<algorithm>
#include <numeric>
using namespace std;
int main()
{
vector<string>x{"abc", "cds", "ma"},a;
a.push_back(accumulate(x.begin(), x.end(), string("")));
copy(a.begin(),a.end(),ostream_iterator<string>(cout," "));
}
试试这个 string(1, input[i].at(j))