加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C对列表

发布时间:2020-12-16 09:53:27 所属栏目:百科 来源:网络整理
导读:在熟悉C STL的同时,我使用对象列表遇到了这个问题. int count (std::string input,std::vectorstd::string screen){ std::string::iterator it = input.begin(); std::pairstd::string,int freq[10]; std::liststd::pairstd::string,int freq2; freq2.push_b
在熟悉C STL的同时,我使用对象列表遇到了这个问题.

int count (std::string input,std::vector<std::string> screen){

  std::string::iterator it = input.begin();

  std::pair<std::string,int> freq[10];
  std::list<std::pair<std::string,int>  > freq2;

  freq2.push_back(std::make_pair(*it,0)); //ERR:No instance of fn matches arg list 
  freq2.push_back(std::make_pair('S',0)); //ERR:No instance of fn matches arg list
  freq2.push_back(std::make_pair("S",0)); //This is fine

  freq[0] = std::make_pair(*it,0);        //This is fine
  freq[0] = std::make_pair("S",0);        //This is fine
  freq[0] = std::make_pair('S',0);        //This is fine

  return 1;

}

freq和freq2都非常相似,只是freq2只是一个列表. Freq能够接受字符,字符串和迭代器指针,并且两个对(freq,freq2)都被声明为对.不知道为什么会这样,有什么提示吗?谢谢.

编辑:现在更有意义了,我得到的所有回复都非常有帮助,谢谢你们!

解决方法

类std :: basic_string没有构造函数,其中有一个char类型的参数.这些状态网络无效

freq2.push_back(std::make_pair(*it,0)); //ERR:No instance of fn matches arg list

更准确地说,在这些语句中,尝试构建std :: pair< std :: string,int>类型的对象.来自std :: pair< char,int>类型的对象.这要求类std :: string的构造函数具有char类型的参数.但是没有这样的构造函数.

至于这些陈述

freq[0] = std::make_pair(*it,0);        //This is fine

然后使用类std :: basic_string的赋值运算符.该类有一个重载赋值运算符,它接受char类型的对象.

basic_string& operator=(charT c);

所以这些陈述是正确的.

请考虑以下示例

#include <iostream>
#include <string>
#include <utility>

int main() 
{
    std::pair<std::string,int> p1 = { "a",1 };
    std::pair<char,int> p2 = { 'B',2 };

    p1 = p2;

    std::cout << p1.first << 't' << p1.second << std::endl;

    return 0;
}

输出是

B   2

由于类std :: pair有一个模板赋值运算符,而类std :: string又有一个赋值运算符,其参数类型为char,因此该代码编译成功.

如果你愿意写的话

std::pair<std::string,int> p1 = std::make_pair( 'a',1 );

代替

std::pair<std::string,1 };

你会得到一个错误,因为std :: pair< char,int>没有转换to std :: pair< std :: string,int>因为没有从char到std :: string的构造函数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读