标签: stl-algorithm

使用for_each和tolower()

我试图使用STL函数for_each将字符串转换为小写,我不知道我做错了什么.这是有问题的for_each行:

clean = for_each(temp.begin(), temp.end(), low);

其中temp是一个包含字符串的字符串.这是我写的低功能:

void low(char& x)
{
x = tolower(x);
}
Run Code Online (Sandbox Code Playgroud)

我一直得到的编译器错误是这样的:

error: invalid conversion from void (*)(char&) to char [-fpermissive]
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

编辑:这是我写的整个功能:

void clean_entry (const string& orig, string& clean)
{
string temp;
int beginit, endit;

beginit = find_if(orig.begin(), orig.end(), alnum) - orig.begin();
endit = find_if(orig.begin()+beginit, orig.end(), notalnum) - orig.begin();

temp = orig.substr(beginit, endit - beginit);

clean = for_each(temp.begin(), temp.end(), low);
}
Run Code Online (Sandbox Code Playgroud)

c++ foreach stl g++ stl-algorithm

0
推荐指数
1
解决办法
1717
查看次数

'typedef'类型的数组上的STL复制失败

平台:MinGW64(rubenvb 4.7.2),Windows 7(64),Qt 4.8.2

给定代码段如下:

/* type definition */
typedef long T_PSIZE;
struct A { T_PSIZE myArray[10]; };
struct B { T_PSIZE myArray[10]; };
/* declare variable */
A a;
B b;
std::copy(a.myArray[0], a.myArray[10], &b.myArray);
Run Code Online (Sandbox Code Playgroud)

我不知道为什么编译器抛出以下错误消息(当从'typedef long T_PSIZE''更改为'typedef int T_PSIZE'时,也会显示类似的消息):

> c:\mingw\rubenvb-4.7.2-64\bin\../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../include/c++/4.7.2/bits/stl_algobase.h:
> In instantiation of '_OI std::__copy_move_a(_II, _II, _OI) [with bool
> _IsMove = false; _II = long int; _OI = long int (*)[9]]': c:\mingw\rubenvb-4.7.2-64\bin\../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../include/c++/4.7.2/bits/stl_algobase.h:422:39:
> required from '_OI std::__copy_move_a2(_II, _II, _OI) [with bool
> _IsMove = false; _II …
Run Code Online (Sandbox Code Playgroud)

c++ stl-algorithm

0
推荐指数
1
解决办法
1452
查看次数

overload std :: find for custom classes

那么std::find对象中的自定义类重载是否可能/"好" ?然后不重载相等运算符.说一个容器存储(智能)指向它的实际数据,我真的对数据布局或存储模式不感兴趣,我只是想找到一个特定的数据成员....

这是合法的,"道德的"吗?如果说我有std::vector<std::shared_ptr<myClass> >- 或"甚至"用户定义的容器?或者我应该总是依赖std::find_if这些案件?

c++ overloading find stl-algorithm

0
推荐指数
1
解决办法
444
查看次数

为什么STL反向算法无法按我预期的那样工作?

尝试反转向量的一部分:

vector<int> nums{1,2,3};
std::reverse(nums.begin(), nums.end()); //LINE1
std::reverse(nums.begin(), (nums.begin() + 1)); //LINE2
std::reverse((nums.begin() + 2), nums.end()); //LINE3
Run Code Online (Sandbox Code Playgroud)

LINE1之后的数字为{3,2,1}

在LINE2和LINE3之后,没有变化。

预期:nums {2,3,1}

c++ stl-algorithm

0
推荐指数
1
解决办法
454
查看次数

替换std :: transform,插入到std :: vector中

我想以类似std :: transform的方式将值插入到std :: vector中。std :: transform需要预先设置大小的第三个参数,但是在我的情况下,大小取决于transformers(),并且不可预测。

...
// std::vector<int> new_args(); <-- not working
std::vector<int> new_args(args.size());
std::transform(args.begin(),args.end(),new_args.begin(),transformers());
Run Code Online (Sandbox Code Playgroud)

是否有一种std:transform-ish方式将值插入到std :: vector中?

c++ stl stl-algorithm c++11

0
推荐指数
1
解决办法
3779
查看次数

具有模板化函数作为参数的STL算法

如何将模板化函数STL提供的算法一起使用<algorithm>?例如,此代码无法编译,因为编译器无法推导出该predicate函数的模板参数:

#include <iostream>
#include <algorithm>

template< typename CharType >
bool predicate( const CharType& c )
{
    return c == '0';
}

std::string
process_string( const std::string& str )
{
    std::string result;
    std::copy_if( str.begin( ),
                  str.end( ),
                  std::back_inserter( result ),
                  predicate );
    return result;
}

int main()
{
    std::cout << process_string("AK0NNDK0ASDAS0") << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ stl-algorithm template-function c++11

0
推荐指数
2
解决办法
96
查看次数

如果出现平局,如何使minmax_element返回索引最少的元素

#include<utility>
#include<alogrithm>
#include<iostream>
using namespace std;
int main(void)
{
  int n=5;
  int s[]={3,5,1,5,5};
  auto r=minmax_element(s,s+n);
  cout<<r.second-s<<endl;
  cout<<*r.second;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是使用索引打印数组中最大元素的代码.我想要索引最小的最大元素(如果是平局,则为第一个最大值)

如何修改上面的代码以获得结果.

c++ std stl-algorithm c++14

0
推荐指数
1
解决办法
109
查看次数

有效的方法来反转三个连续的子范围[A,B,C] - > [C,B,A]

我有一个由三个连续的子阵列A,B和C组成的数组[A,B,C].我想将较大的数组反转为[C,B,A].我目前的尝试涉及你的呼叫std::rotate,如下所示.我想知道是否有更简单/有效的方法来实现这一点,最好使用std算法.

Step 1: "swap" sub-array B,C
[A,B,C] -> [A|B,C] -> [A,C,B]

Step 2: "swap" sub-array A,C
[A,C,B] -> [A,C|B] -> [C,A,B]

Step 3: "swap" sub-array A,B
[C,A,B] -> [C|A,B] -> [C,B,A]
Run Code Online (Sandbox Code Playgroud)

编辑

例如,给定数组[1,2,3|4,5,6|7,8,9]我想"反转"它[7,8,9|4,5,6|1,2,3]

示例实施.请注意,"范围"的大小仅仅是说明性的.

c++ stl stl-algorithm

-1
推荐指数
1
解决办法
98
查看次数

如何摆脱这个do-while循环?

我正在尝试创建一个插入一串字符的程序,验证它,然后对其进行排序并将其打印出来.

我确定这里有一个明显的逻辑错误,有人可以帮忙指出来吗?我花了好几个小时盯着我的屏幕.在我对C++的有限知识中,我尝试了所有我知道的东西,但是我仍然无法使用它.

你能提供的任何东西都会以某种方式帮助我,即使它是居高临下的.

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

void mySort(string &s);

int main()
{
    string str;
    char c;
    bool invalid = true;

    cout<<"Please enter some alphabetical characters:"<<endl;
    cout<<"(* to end input): ";

    do
    {
      getline(cin, str, '*');

      for(int i = 0; i < str.length(); i++)
      {
        c = str.at(i);
      }

      if(! ( ( c >= 'a' && c <= 'z' ) || ( c >= 'A' && c <= 'Z' ) ) )
      {
         cout<<"Error!"<<endl;
      } …
Run Code Online (Sandbox Code Playgroud)

c++ do-while stl-algorithm

-5
推荐指数
1
解决办法
112
查看次数

标签 统计

c++ ×9

stl-algorithm ×9

stl ×3

c++11 ×2

c++14 ×1

do-while ×1

find ×1

foreach ×1

g++ ×1

overloading ×1

std ×1

template-function ×1