这是代码(找到2组的联合):
template <class dtype>
void printSet(dtype data)
{
std::cout<<"\n";
for(auto i = data.begin(); i != data.end(); i++)
{
std::cout<<*i<<" ,";
}
}
int main(int argc, char const *argv[])
{
int arr[] = {1,2,3,4,5};
std::set<long long> a(arr, arr + 5), b(arr, arr + 5), c;
std::vector<long long> v;
b.insert(1000);
printSet(a);
printSet(b);
set_union(a.begin(), a.end(), b.begin(), b.end(), v.begin());
printSet(v);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这就是我得到的:
1 ,2 ,3 ,4 ,5 ,
[1] 9444 segmentation fault ./a.out
Run Code Online (Sandbox Code Playgroud)
我在哪里搞砸了?
在周末我将参加一个编程竞赛,我想知道我是否应该使用std :: vector或std :: map?我会简单地将它们用作数组,但我感到困惑哪个更好(主要是基本操作的速度)?
我在stackoverflow上看到这张图片,我不知道这些之间的主要区别是什么......

图片表明矢量更快......我真的不知道该怎么办请帮助我!我需要像数组一样使用它们但是具有动态尺寸...在此先感谢,
编辑 我可能会得到一个二维整数数组(例如一个城市或一个labirinth的地图,我会得到一些可以用图形算法或动态编程解决的问题),所以我需要的是:写,读取"表"的特定单元格,搜索特定值,我想这就是全部.我听说std :: map不会在内存中找到完整的N*M大小的表,但是我会按值来做它...所以它可能会使用更少的内存吗?
很抱歉这么傻但我从来没有真正的老师,我从中学到了我所知道的一切.我刚刚开始学习数据结构(2-3棵树,红黑树,二项式堆等等......)
我对C++很陌生,所以如果答案显而易见,我会道歉.
我一直在编写STL风格的自定义数据结构,以此来提高我的技能.(我实际上对这个结构也有实际需要,但是为了学习目的,我会有点过火.)
这个结构需要动态调整大小(比如矢量),在我的初稿中,我使底层的"容器"成为C风格的数组,并手动完成所有的分配和解除分配.我正在重构,我想使用C++ 11风格的std :: array作为我的底层结构,只是为了让代码更清晰一些.我的问题是我不知道如何以允许调整大小的方式声明数组类成员.由于不同的模板参数需要不同的类型,因此我不能将成员声明为数组,然后在调整大小时将相同的变量分配给数组.
我想为每个可能的大小声明一个成员,比如
private:
array<T, 8>
array<T, 16>
array<T, 32>
...
Run Code Online (Sandbox Code Playgroud)
但我不希望每个数组都默认构造T成员.
这里有干净的解决方案吗?或者我只需要坚持使用C风格的数组?
谢谢您的帮助.
编辑:
在重新阅读我的问题后,我认为实际上并不合理.我知道std :: array的大小必须在编译时知道,但出于某种原因我的大脑推断我的目标是不可能的.现在我觉得很明显,我坚持使用C风格的数组和堆.我想我只需要写出来就可以清楚地表达出来.
谢谢你的回答.
我在我的代码中做了类似的事情
S s;
s.a=1
s.b=2
v.push_back(s)
Run Code Online (Sandbox Code Playgroud)
既然C++有转发,我可以写一些类似的东西
v.push_back(1,2)
Run Code Online (Sandbox Code Playgroud)
fyi visual studio支持转发,因为以下工作符合预期
//http://herbsutter.com/gotw/_102/
template<typename T, typename ...Args>
std::unique_ptr<T> make_unique( Args&& ...args )
{
return std::unique_ptr<T>( new T( std::forward<Args>(args)... ) );
}
Run Code Online (Sandbox Code Playgroud) 我正在学习C++,我正在尝试制作一个打印5个变量的简单程序,正如我的书中所说,但它并没有执行我的代码.
#include<iostream>
using namespace std;
int main()
{
//Program Code below
return 0;
char letter; letter = 'A'; //Declared, then initialized
int number; number = 100; //Declared, then initialized
float decimal = 7.5; //Declared AND initialized
double pi = 3.14159; //Declared AND initialized
bool isTrue = false; //Declared AND initialized
cout<<"Char letter: "<<letter<<endl;
cout<<"Int number: "<<number<<endl;
cout<<"Float decimal: "<<decimal<<endl;
cout<<"Double pi: "<<pi<<endl;
cout<<"Bool isTrue: "<<isTrue<<endl;
}
Run Code Online (Sandbox Code Playgroud) 作为主题陈述..哪个版本更有效,为什么?
std::vector a;
..
a.clear();
Run Code Online (Sandbox Code Playgroud)
要么
std::vector a;
..
if(!a.empty())
a.clear();
Run Code Online (Sandbox Code Playgroud) 到目前为止,我已经在C++上学过两门课,每门课都在不同的学校,并且他们都使用了'using namespace std;' 教基础编程.这可能是巧合,但我不得不自己去找出这样做不好的做法.
阅读C++源代码显然是一种很好的学习方式,当它是一个你很少了解的特性时,它就显得非常有趣.就标准库来源而言,由于名称的丑化,这很难实现.
在将源代码包含在标准库中之前,是否通过某种类型的源代码处理完成了uglifying?如果是这样,原始源代码会发生什么?是否有任何非uglified C++标准库源代码的存储库?
我在寻找有趣的C++ 11很快C++ 14种特别功能.
我无法想象保持这种形式的代码会非常有趣....
编辑:
有人建议在这里取消这个过程.
我有以下内容:
typedef std::map<int, std::map<std::string, std::string> > ComplexMap;
ComplexMap map_a;
ComplexMap map_b;
Run Code Online (Sandbox Code Playgroud)
我想将整个map_a交换为map_b.以下两个选项之间是否存在功能差异:
// 1
ComplexMap::iterator end = map_a.end;
for (ComplexMap::iterator it = map_a.begin(); it != end; ++it)
{
mam_b[it->first].swap(it->second);
}
// 2
map_b.swap(map_a);
Run Code Online (Sandbox Code Playgroud) 什么是表示未编制索引列表的类,其中包括检查对象是否在列表中?
list<char> list;
list.add("obj");
if(list.inlist("obj")) doStuff();
list.remove("obj");
Run Code Online (Sandbox Code Playgroud)
优选地,该类必须在标准库或增强库中,但如果您知道任何其他方法,则无论如何都应该回答,因为它可能是有趣的.
我知道有一个std::list类,但它没有我正在寻找的功能.(检查对象是否在列表中)