说“一个包含STL容器的auto_ptr可能会被用来防止容器的进一步修改”。它使用了以下示例:
auto_ptr<vector<ContainedType> > open_vec(new vector<ContainedType>);
open_vec->push_back(5);
open_vec->push_back(3);
// Transfers control, but now the vector cannot be changed:
auto_ptr<const vector<ContainedType> &g
我试图为ostream操作符使用非成员函数重载的标准格式,但是当我有一个向量迭代器的内部赋值时,它将不能与const第二个参数一起工作。当使用常量参数时,编译器给出以下错误: error: no match for 'operator=‘in j= bus.owAPI::owBus::owCompList.std::vector...
我的类的相关部分如下:
class owBus{
public:
std::vector<owComponent> owCompList; //unsorted complete list
fri
我只是花了大约一个小时试图找出为什么当我试图构建下面的类(在"Semantic issue - no matching function for call to 'swap'"中)时,我会得到20条类型为XCode的错误消息。
test.h
#include <iostream>
#include <string>
#include <vector>
class Test{
std::vector<std::string> list;
void run() const;
static
为什么我不能引用包含对象引用的std::vector?下面的代码在Visual C++ 2010中生成编译错误:
void Map::Filter( Object::Type type, std::vector<Object&>& list )
{
for ( register int y = 0; y < MAP_H; y++ )
for ( register int x = 0; x < MAP_W; x++ ) {
if ( under[y][x].GetType() == type )
list.push_
有人能澄清为什么这是合法的C++代码吗?(是的,我在问我的代码为什么工作;)
#include <iostream>
#include <vector>
int main()
{
const std::size_t N = 10;
int a[N]{}; // value-initialize it to get rid of annoying un-initialized warnings in the following line
std::cout << a[5] << std::endl; // got a
我不确定如何在不创建额外变量的情况下解决此问题。下面是不能编译的代码: std::string & printVec(std::vector<double> const &ds, std::string &dum) {
std::vector<double>::iterator it;
// std::vector<double> dsi = ds; // Created just to get the code to work, using dsi.begin() etc.
dum = " "
我想使用一个向量来保存大小为5x5的只读整数矩阵
vector<const int[5][5]> startingPieces;
但是这个声明导致了一堆我以前从未见过的奇怪的错误。
error C2535: 'const int (*std::allocator<_Ty>::address(const int (&)[5][5]) const)[5][5]' : member function already defined or declared
1> with
1> [
1>
在使用g++ -std=c++0x进行编译时,我遇到了一些将T类型的元素推回到向量的编译问题。
这是一个最小的示例:
#include <vector>
using namespace std;
class A {
public:
A() { }
A& operator=(A &orig) {
return *this;
}
};
int main(int argc, char **argv) {
A a;
vector<A> b;
A c = a; // This is fine
我很难理解为什么我的代码不能在这里编译。我从标准库中得到了许多错误消息,大致如下
main3.cpp:10:20: required from ‘void addAndCout(T&&) [with T = const char (&)[11]]’
main3.cpp:20:28: required from here
/usr/include/c++/5/bits/alloc_traits.h:450:27: error: forming pointer to reference type ‘const char (&)[11]’
usi
我在用一些容器。参考向量存在问题,无法正常检测。
error C2039: 'vecMsg' : is not a member of 'std::_Vector_iterator <std::_Vector_val>std::_Simple_types<T2 &>>>'
为什么不能识别成员变量?
vector<T1> vec1;
vector<T2> vec2;
vector<T1>::iterater iVec1;
vector<T2>::iterater iVec
以下工作:
struct A {
int i;
int v;
};
std::initializer_list<A> getList() {
return {A{0,1}, A{2,3}};
}
int main() {
auto list = getList();
}
我可以验证列表的内容是正确的。
但是,如果我将成员v更改为std::vector,则无法工作:
struct A {
int i;
std::vector<int> v;
};
std::initializer_list<A> getLi
--开始编辑
User @User 17732522指出,调用UB的缺陷来自于pop_back()使根据vector库文档使用的引用无效。而且,当它发生时,不需要计算来检测它,因为它不是C++核心的一部分。
但是,@ also 17732522也指出了这个修复方法很简单。替换这两行连续代码的出现:
v.pop_back();
v.emplace_back(...);
用这两行:
std::destroy_at(&v[0]); // optional since A has a trivial destructor
std::construct_at<A, int>(&am
我在使用排序函数时遇到了一些问题...下面是我的代码:
class Parola {
public:
string s;
int repetition;
bool operator()(const Parola *x, const Parola *y) {
return x->repetition > y->repetition;
}
};
int main(int argc, char** argv) {
...
vector<Parola> p;
...
some insert
std::vector<string> names;
std::vector<string>::iterator start = names.begin();
std::vector<string>::iterator end = names.end();
sort (start,end);
//are my start and end valid at this point?
//or they do not point to front and tail resp?