我有这张地图:
Map<Id,shared_ptr<Fan>> fans;
Run Code Online (Sandbox Code Playgroud)
里面Fan我有这个向量:
vector<Id> friendsIds;
Run Code Online (Sandbox Code Playgroud)
我想在这个向量中搜索一个特定的 Id,所以我使用:
vector<Id>::iterator idsIterator;
vector<Id>::iterator first=fans[fanId]->friendsIds.begin();
vector<Id>::iterator last=fans[fanId]->friendsIds.end();
idsIterator=std::find(first, last, friendId);
Run Code Online (Sandbox Code Playgroud)
但我得到了这个巨大的错误:
Multiple markers at this line
- no matching function for call to 'find(std::vector<unsigned int>::iterator&, std::vector<unsigned int>::iterator&, int)'
- '__gnu_cxx::__normal_iterator<unsigned int*, std::vector<unsigned int> >' is not derived from
'std::istreambuf_iterator<_CharT2, std::char_traits<_CharT> >'
- candidate is:
- Invalid arguments ' Candidates are: __gnu_cxx::__enable_if<11 74 0 __value 14 std::__is_char 1 #074 0 __value 14
std::__is_char 1 #0,std::istreambuf_iterator<#0,std::char_traits<#0>>>::__type
find(std::istreambuf_iterator<#0,std::char_traits<#0>>, std::istreambuf_iterator<#0,std::char_traits<#0>>, const #0 &) '
Run Code Online (Sandbox Code Playgroud) 我想按照 WWDC 2014 会话 305 视频和 OpenSSL 网站中的说明在没有安装 gcc 的情况下在 OS X 上为 iOS 交叉编译 OpenSSL 1.0.1h。
我解压缩/解压,然后按照此处的建议从(几乎)切换gcc到。clang
OLD_LANG=$LANG
unset LANG
sed -i "" 's|\"iphoneos-cross\"\,\"llvm-gcc\:-O3|\"iphoneos-cross\"\,\"clang\:-Os|g' Configure
sed -i "" 's/CC= cc/CC= clang/g' Makefile.org
sed -i "" 's/CFLAG= -O/CFLAG= -Os/g' Makefile.org
export LANG=$OLD_LANG
Run Code Online (Sandbox Code Playgroud)
请注意,我必须坚持使用该makedepend工具,否则该make depend步骤将失败(正如其他地方也提到的)。安装该工具brew install makedepend对我来说不是问题(但在 Clang 旁边安装 gcc 会是)。现在
./Configure iphoneos-cross
make depend
make
Run Code Online (Sandbox Code Playgroud)
导致关于缺少包含文件(例如)的警告(during make depend)和错误(during )。传递给的典型包含路径显然是.makestdlib.hclang-I. -I.. -I../include
我认为这是 …
在此运算符重载代码中,我不想在需要的地方写“ using namespace std”,而是想包含“ std ::”。
在cout和cin之后添加“ std ::”后,我仍然在其他包含“ std ::”的地方出现错误。
#include<iostream>
//using namespace std;
class Complex
{
private:
int real, imag;
public:
Complex(int r = 0, int i = 0) : real(r), imag(i) {}
friend ostream & operator << (ostream &, const Complex &);
friend istream & operator >> (istream &, Complex &);
};
ostream & operator << (ostream &out, Complex &obj)
{
out<<obj.real<<" "<<obj.imag;
return out;
}
istream & operator >> (istream &in, const Complex &obj)
{
in>>obj.real>>obj.imag; …Run Code Online (Sandbox Code Playgroud) 我有15个线程,我想执行10个推入的函数。我现在不在乎保护它,只是想知道为什么win api会执行功能,而std不会。
编码从手工制作的英雄日123开始或多或少
struct WorkQueueEntry
{
char* stringToPrint;
};
static uint32 nextEntryToDo;
static uint32 entryCount;
WorkQueueEntry entries[256];
inline void PushString(const char* string)
{
WorkQueueEntry* entry = entries + entryCount++;
entry->stringToPrint = const_cast<char*>(string);
}
struct ThreadInfo
{
int logicalThreadIndex;
};
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
printf("entry count %i, nextEntryToDo %i\n", entryCount, nextEntryToDo);
ThreadInfo* threadInfo = (ThreadInfo*)lpParameter;
for(;;) {
if(nextEntryToDo < entryCount) {
WorkQueueEntry* entry = entries + nextEntryToDo++;
char buffer[256];
sprintf_s(buffer, "Thread %u: %s", threadInfo->logicalThreadIndex, entry->stringToPrint);
printf(buffer);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在主要的某个地方 …
我知道我必须为std :: set重载运算符<。
我用两个类重载了运算符<:UniqueID和UniqueIDWithBug。唯一的区别是this->unique_id_a_ == t.unique_id_a_比较时添加了“ UniqueID”代码。
然后,我将相同的元素放入两组。最后,我在集合中找到了一个元素。一组可以找到它,另一组找不到。这个问题使我困惑了很长时间。
struct UniqueID {
uint64_t unique_id_a_{0};
uint64_t unique_id_b_{0};
bool operator<(const UniqueID &t) const {
if (this->unique_id_a_ < t.unique_id_a_) {
return true;
}
if (this->unique_id_a_ == t.unique_id_a_ &&
this->unique_id_b_ < t.unique_id_b_) {
return true;
}
return false;
}
};
struct UniqueIDWithBug {
uint64_t unique_id_a_{0};
uint64_t unique_id_b_{0};
bool operator<(const UniqueIDWithBug &t) const {
if (this->unique_id_a_ < t.unique_id_a_) {
return true;
}
return (this->unique_id_b_ < t.unique_id_b_);
}
};
// init data
std::set<UniqueID> _set = …Run Code Online (Sandbox Code Playgroud) 我是C ++的初学者。我想问一下:
是std::uniform_int_distribution<> dis(1, 6);等于std::uniform_int_distribution<int> dis(1,6);?
非常感谢。
我正在尝试制作一个模板函数,使我可以使用std :: array对象作为具有可变数量元素的参数。
例如:
#include <array>
template <class T>
void func(std::array<T,/*varying#ofelems*/> ary){...}
Run Code Online (Sandbox Code Playgroud) 在libc ++中,std :: chrono :: microseconds定义为
std::chrono::duration<long long, std::micro>
Run Code Online (Sandbox Code Playgroud)
对于64位平台,long long的定义导致与int64_t的冲突,因为之前已为int64_t定义了代码。
在gnustl中,以前的std :: chrono :: microseconds是用in64_t类型定义的。
我想将微秒的现有定义覆盖为gnustl版本,例如:
typedef std::chrono::duration<int64_t, std::ratio<1, 1000000>> std::chrono::microseconds;
or
#define std::chrono::microseconds std::chrono::duration<int64_t, std::ratio<1, 1000000>>;
Run Code Online (Sandbox Code Playgroud)
我如何达到相同的目的。Typdef和#define在具有std ::和chrono ::的同时给出语法错误,这是我们希望重新定义std :: chrono :: microseconds吗?
我编写了一个简单的程序,以了解标准c ++库sizeof()的功能。
它遵循:
const char* array[] = {
"1234",
"5678"
};
std::cout << sizeof(array) << std::endl;//16
std::cout << sizeof (array[0]) << std::endl;//8
std::cout << printf("%lu\n",sizeof (char) );//1
std::cout << printf("%lu\n",sizeof (int) );//24
std::cout << printf("%lu\n",sizeof (float) );//24
std::cout << printf("%lu",sizeof (double) );//281
Run Code Online (Sandbox Code Playgroud)
可以通过输出报告看到字符在我的OS中的尺寸为1字节,这是可以预期的。但是我不明白为什么'''array [0]'''的维数是8,因为它包含4个字符,并且对于包含在字符串中的结尾序列“ \ n”至少包含2个字符。因此,我假定数组的第一个元素占用的字节数应为6而不是8。此外,如果增加/减少数组的第一个元素中包含的字符数,则其大小不会改变。显然,我错了。如果有人可以向我解释此功能,我将不胜感激。谢谢,
我喜欢了解赞成与反对者拥有和不拥有这样的演员。在包括Stack Overflow在内的多个地方,我可以看到const char*强制转换被认为是一个坏主意,但我不确定为什么吗?
编写通用例程和模板时,缺少(const char*)和强制始终使用强制转换c_str()会产生一些问题。
void CheckStr(const char* s)
{
}
int main()
{
std::string s = "Hello World!";
// all below will not compile with
// Error: No suitable conversion function from "std::string" to "const char *" exists!
//CheckStr(s);
//CheckStr((const char*)s);
// strlen(s);
// the only way that works
CheckStr(s.c_str());
size_t n = strlen(s.c_str());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
例如,如果我有大量接受const char*输入的文本处理功能,并且我希望std::string每次使用都能够使用c_str()。但是以这种方式std::string,const char*如果没有额外的努力,模板函数就不能同时使用。
作为一个问题,我可以看到一些运算符重载问题,但可以解决这些问题。
例如,正如[eerorika]指出的那样,通过允许隐式强制转换为指针,我们允许将非自愿的字符串类包含在布尔表达式中。但是我们可以通过删除bool运算符轻松解决此问题。更进一步,强制转换操作符必须明确:
class …Run Code Online (Sandbox Code Playgroud)