下面的代码是类初始化列表,它在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:我无法想到合适的头衔,所以我给了这个头衔
我需要将两个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) 我在这里问这个问题是因为我认为这更像是一个程序问题而不是其他问题.
我正在使用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?
我试图在字符串中找到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)
但我得到错误.有人可以帮忙吗?
谢谢.
我发现一篇文章说,删除矢量项的最佳方法是使用擦除 - 删除习语,如下所示
//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一起使用
为什么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) 在访问向量元素时,使用at和括号之间是否有任何区别[]?
我看到同样的人喜欢myvector.at()上面myvector[],是否有一些东西使它更优选,如在某些情况下更好的表现,或与其他一些语言共同?
我知道参数的默认参数值不能是另一个参数的值.例如
void foo( int a, int b = a );
Run Code Online (Sandbox Code Playgroud)
显然,b的默认值不是编译时常量,但在我看来,编译器可以生成代码来执行此操作.
我敢肯定有一个很好的理由不允许这个,我想知道它是什么?
#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中使用重载方法?
签名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)
如果push_back承诺不改变val,为什么我们会得到这个错误?
克服错误的正确和清洁方法是什么?也许是const_cast?
谢谢!
User.h:
class User {
...
public:
vector<User*> friends_;
...
}
Run Code Online (Sandbox Code Playgroud)