Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何修改lambda中字符串的向量_C++_String_Vector_Lambda - Fatal编程技术网

C++ 如何修改lambda中字符串的向量

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)

如何将字符串向量传递给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))
                  {
                      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);