C++ 如何修改lambda中字符串的向量
如何将字符串向量传递给lambda并将字符复制到向量 这里我捕获向量作为参考,但一旦完成for_,所有 “token”向量中的字符串为空,因此“final”字符串为空C++ 如何修改lambda中字符串的向量,c++,string,vector,lambda,C++,String,Vector,Lambda,如何将字符串向量传递给lambda并将字符复制到向量 这里我捕获向量作为参考,但一旦完成for_,所有 “token”向量中的字符串为空,因此“final”字符串为空 string encryption(string s) { string test; std::copy_if(s.begin(), s.end(), back_inserter(test), [](char c) { if (isspace(c)
string encryption(string s) {
string test;
std::copy_if(s.begin(), s.end(), back_inserter(test), [](char c)
{
if (isspace(c))
{
return false;
}
return true;
});
int size = s.size();
float number = sqrt(size);
int row = ceil(number);
int col = floor(number);
while ((row * col) < size)
{
row++;
}
std::vector<string> token;
token.reserve(row);
for_each(test.begin(), test.end(), [&](char c) mutable
{
static int count = 0;
token[count%row] += c;
cout << token[count%row] << endl;
count++;
});
stringstream final;
std::copy(token.begin(), token.end(), std::ostream_iterator<string>(final, " "));
return final.str();
}
字符串加密(字符串s){
串试验;
标准::复制if(s.begin()、s.end()、back_插入器(测试),[](字符c)
{
if(i空间(c))
{
返回false;
}
返回true;
});
int size=s.size();
浮点数=sqrt(尺寸);
int row=ceil(数字);
int col=楼层(编号);
while((行*列) cout这里的问题是,您可以通过调用设置向量容量,但不能设置其大小(您可以使用or设置)
简而言之:你的向量是空的,因此循环打印不会重复
更糟糕的是,因为向量是空的,所以对它的所有索引都将超出范围并导致错误
简单的解决方案是设置向量的大小:
std::vector<string> token(row);
std::向量标记(行);
或者
std::vector<string> token;
token.resize(row); // Using *resize* to set the size
std::向量令牌;
token.resize(行);//使用*resize*设置大小
您在这里有未定义的行为,如
token.reserve(row);
分配足够的内存来容纳行
元素,但不改变向量的大小。因此,在lamdba中索引标记
token[count%row] += c;
是越界访问。若要解决此问题,请将对std::vector::reserve
的调用更改为对std::vector::resize
的调用:
token.resize(row);