我是C++的新手,并不了解STL库的所有概念,所以请耐心等待.我编写了以下代码片段(粘贴在下面),以便在排序向量中找到lower_bound.尽管此代码在Release模式下工作正常,但它在调试模式(VStudio-8)中断言.我相信这是因为less_equal<int>不是一个严格的弱序.
从以下线程:stl排序 - 严格弱排序
我有点明白,STL会强加弱序,但我还不清楚为什么?
在我的情况下,我需要使用,less_equal<int>因为我试图找到排序向量中给定值的最近元素.
下面的代码片段是否有效?还有,有更好的方法吗?此外,任何关于弱和部分排序的见解/参考都会有所帮助.
int main() {
vector<int> dest;
for(int i = 0;i <6;i++) {
dest.push_back(i);
}
vector<int>::iterator i =
std::lower_bound(dest.begin(),dest.end(),4,less_equal< int >());
return 1;
}
Run Code Online (Sandbox Code Playgroud) 我明白函数不应该返回对自动变量的引用.但是我只想了解常量对象的存储位置,即它是否与静态全局变量一起存储在内存部分中.
这是Visual Studio 8上的代码.看起来const对象存储为自动变量.我假设事情是正确的还是实现特定的,还是取决于构造函数是否微不足道?
如果有人能够解释为什么每个案例都像他们那样行事,那将会非常棒.
//here i'm intentionally returning a ptr to local const ptr hope the syntax is right
const char* const* get_const_char_ptr() {
const char * const ptr = "downontheupside";
return &ptr;
}
const int& get_const_int() {
const int magic_number = 20;
return magic_number;
}
const string& get_const_string() {
const string str("superunknown");
return str;
}
const string* get_const_string_ptr() {
const string str("louderthanlove");
return &str;
}
int main() {
//case1
const int &i = get_const_int();
cout<<"case1:"<<i<<endl;
//case 2
const …Run Code Online (Sandbox Code Playgroud) 我遇到类似于下面的代码片段,它会抛出编译器错误,因为它使用了一个const_iterator.是有一个原因vec.end()在std::copy不会隐获得const投?
int main(int argc, char* argv[]) {
vector<int> vec;
vec.push_back(20);
vec.push_back(30);
vector<int> copy_vec;
vector<int>::const_iterator i = vec.begin();
std::copy(i,vec.end(),back_inserter(copy_vec));
cerr<<copy_vec.size()<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)