小编0x4*_*2D2的帖子

多个typedef用于相同类型

下面的代码是类初始化列表,它在Ubuntu标准包中提供.在这个迭代器和const_iterator中是相同类型的typedef.我只是想知道为什么我们希望为不同类型的迭代器使用相同的typedef?理想情况下,对于Iterator,它应该有typedef _E*迭代器.

// In the class initializer list:
namespace std 
{ 
  /// initializer_list 
  template<class _E> 
    class initializer_list 
    { 
    public: 
      typedef _E                value_type; 
      typedef const _E&         reference; 
      typedef const _E&         const_reference; 
      typedef size_t            size_type; 
      typedef const _E*         iterator; 
      typedef const _E*         const_iterator;
Run Code Online (Sandbox Code Playgroud)

PS:我无法想到合适的头衔,所以我给了这个头衔

c++ stl typedef

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

将两个8位阵列组合到USHORT(16位),无需循环

我需要将两个UCHAR(8位)数组合并到C中的USHORT(16位)值.但我必须在不使用"for"或任何循环的情况下执行此操作.

如:

UCHAR A[1000], B[1000];
USHORT C[1000];
Run Code Online (Sandbox Code Playgroud)

结果必须如下:

C[0] = {A[0], B[0]};
C[1] = {A[1], B[1]};
...
C[1000]={A[1000], B[1000]};
Run Code Online (Sandbox Code Playgroud)

c c++

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

为什么我的计算器在2 ^ 34 == 2 ^ 34 - 1时返回true?

我在这里问这个问题是因为我认为这更像是一个程序问题而不是其他问题.

我正在使用TI-84 Plus Sliver Edition计算器,该计算器包含可以测试小于,大于和平等的逻辑运算符.我发现当我输入表达式时:

2^34 == 2^34 - 1
Run Code Online (Sandbox Code Playgroud)

它给了我一个令人惊讶的真实.值得一提的是,我的计算器无法精确输出2 ^ 34的结果.相反,它使用指数表示法和任何其他大于33的幂.这是布尔输出中的潜在因素吗?

此外,如果第二个表达式减去1到9,则相等性测试仅返回true.当数字> = 10时,则正确返回false.

这可能是一个舍入错误吗?为什么这个表达式返回true?

math floating-point decimal

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

C++中的字符串比较

我试图在字符串中找到i的数量.这是我的代码:

string str = "CS445isaninterestingcourse";

int num = 0;

for (int i = 0; i < str.length(); i++)
{
    if (str.substr(i, i + 1) == 'i')
        num++;
}
Run Code Online (Sandbox Code Playgroud)

但我得到错误.有人可以帮忙吗?

谢谢.

c++ string

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

需要了解std :: remove with vector.erase

我发现一篇文章说,删除矢量项的最佳方法是使用擦除 - 删除习语,如下所示

//say vec = 1963,1923,1900,1963,1967;
vector.erase(std::remove(vec.begin(),vec.end(),1963),vec.end());
Run Code Online (Sandbox Code Playgroud)

根据我的理解,vec.erase在第一个和最后一个迭代器中包含两个参数.范围包括第一个和最后一个之间的所有元素.我想知道如果要删除的值存在于向量中的不同索引处,std :: remove将如何给出单个迭代器范围.我想知道std :: remove如何与vector.erase一起使用

c++ vector stl-algorithm

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

std :: unique_ptr的好处是什么,包括删除器作为类型的一部分

为什么std::unique_ptr包含删除函数签名作为模板定义的一部分有什么原因?

template<class T, class Deleter = std::default_delete<T>> class unique_ptr;
Run Code Online (Sandbox Code Playgroud)

VS

template< class T > class shared_ptr;
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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

访问存储在vector中的对象:使用std :: vector :: at或std :: vector :: operator []?

在访问向量元素时,使用at和括号之间是否有任何区别[]

我看到同样的人喜欢myvector.at()上面myvector[],是否有一些东西使它更优选,如在某些情况下更好的表现,或与其他一些语言共同?

c++ vector

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

C++默认参数值使用另一个参数的值

我知道参数的默认参数值不能是另一个参数的值.例如

void foo( int a, int b = a );
Run Code Online (Sandbox Code Playgroud)

显然,b的默认值不是编译时常量,但在我看来,编译器可以生成代码来执行此操作.

我敢肯定有一个很好的理由不允许这个,我想知道它是什么?

c++

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

std :: thread重载未解析(带右参数)

#include <thread>
#include <iostream>
using namespace std;

class A
{
    public:
    A(){}
    void m(std::string* s)
    {
     cout<<*s;
    }
    void m(std::string s)
   {
     cout<<s;
   }
};    

int main()
{
 A a;
 string str="hi!\n";
 std::thread(&A::m,a,&str);

}
Run Code Online (Sandbox Code Playgroud)

这不编译; 它给:

error: no matching function for call to ‘std::thread::thread(<unresolved overloaded function type>, A&, std::string*)’
Run Code Online (Sandbox Code Playgroud)

如果我删除第二个成员,它编译!为什么?我不能在std :: thread中使用重载方法?

c++ overloading std stdthread

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

vector :: push_back从const Type*转换为type*

签名vector::push_back是:

void push_back (const value_type& val);
Run Code Online (Sandbox Code Playgroud)

这意味着它有责任不腐败val.

我的功能是:

Result User::addFriend(const User* newFriend)
{
    // check that newFriend is valid and is not already a friend
    if (newFriend == NULL || isFriend(newFriend)) return FAILURE;
    friends_.push_back(newFriend);
    friendsNum_++;
    return SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

当我编译.c文件时,我得到编译错误:

invalid conversion from 'const User*' to 
std::vector User*::value_type
Run Code Online (Sandbox Code Playgroud)
  1. 如果push_back承诺不改变val,为什么我们会得到这个错误?

  2. 克服错误的正确和清洁方法是什么?也许是const_cast

谢谢!

User.h:

class User {
...
public:
    vector<User*> friends_;
...
}
Run Code Online (Sandbox Code Playgroud)

c++ const vector const-cast

1
推荐指数
2
解决办法
1732
查看次数