如何从中删除重复值
std::vector <std::pair<UnicodeString, UnicodeString> > myVect;
Run Code Online (Sandbox Code Playgroud)
是否有任何内置函数或我需要为此编写自定义代码
每当我试图对导致无限循环的对象矢量进行排序时,我就遇到了一个问题.我正在使用我传递给sort函数的自定义比较函数.
我能够通过在两个对象相等而不是true时返回false来解决问题但我并不完全理解解决方案.我认为这是因为我的比较功能违反了cplusplus.com上列出的规则:
比较函数对象,如果第一个参数位于其定义的特定严格弱顺序中的第二个参数之前,则返回两个与该范围中包含的相同类型的值,否则返回false.
任何人都可以提供更详细的解释吗?
我的问题陈述如下.存在"域"的概念,其由许多"子域"组成.现在,这些子域本身就是域.以下是我可以做的事情的基本方法.我可以使用auto_ptr或其他东西,但现在暂时离开.
class Domain
{
private:
Domain* subdomains;
}
Run Code Online (Sandbox Code Playgroud)
但是,我能够编译并运行以下程序,我认为它做了同样的事情并给了我想要的东西.
#include <iostream>
#include <vector>
#include <string>
class Domain
{
private:
std::string name_;
public:
std::vector<Domain> subdomains;
Domain(std::string name) : name_(name) {};
std::string name() {return name_;}
void addSubDomain(std::string subDomainName);
};
void Domain::addSubDomain(std::string subDomainName)
{
subdomain.push_back(Domain(subDomainName));
}
int main()
{
std::cout<<"Hello, World"<<std::endl;
Domain domain("wow");
domain.addSubDomain("wow-child");
std::cout<<"Domain name is "<<domain.name()<<std::endl;
std::cout<<"Subdomain name is "<<domain.subdomain[0].name()<<std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我运行它的输出是
$./main
Hello, World
Domain name is wow
Subdomain name is wow-child
Run Code Online (Sandbox Code Playgroud)
我的问题是,在实施以下内容时,我是否有任何陷阱?现在,我看不到任何东西.如果没有陷阱,那么这对我的问题来说是一个非常好的解决方案.
编辑
如果这不是一个解决方案,那么还有另一个我可以使用的解决方案,它不涉及原始指针的管理吗?
我有一个std::vector包含很多元素.由于向量很大,我将指针存储到另一个向量中的某些特定元素,以便能够更快地访问它们.但是随着向量的增长,有时它的内部容器会被重新分配,导致我的所有指针都变得无效.
有没有办法知道这种情况何时发生?这样我就可以更新其他列表中的指针.
我怎么漂亮打印std::vector?例如,如果我构造一个std::vector<int>(6, 1),我可以运行它来获得像{1 1 1 1 1 1}C++ 一样的输出吗?它必须是通用的,因为大小和值可能会改变,因此std::vector<int>(4, 0)也是如此{0 0 0 0}.
从我读到的,std::vector是与需要连续内存字节数组的c函数接口时使用的适当结构.但是我想知道如何在某些情况下确定阵列的大小
我写了一个小样本程序来说明我的意思.
int main(int argc, char *argv[])
{
std::vector<unsigned char>v;
unsigned char p[1024];
sprintf((char*)&p[0], "%10d", 10);
cout << "Size: " << v.size() << " Length: " << v.capacity() << endl;
v.reserve(30);
cout << "Size: " << v.size() << " Length: " << v.capacity() << endl;
memcpy(&v[0], &p[0], 20);
cout << "Size: " << v.size() << " Length: " << v.capacity() << endl;
v.reserve(50);
cout << "Size: " << v.size() << " Length: " << v.capacity() << endl;
v.reserve(0); …Run Code Online (Sandbox Code Playgroud) 考虑以下.
我有两个std::sets,并希望std::vector按排序顺序合并它们.
哪种方法最有效?
我做了类似的事情,但我认为必须有更好的方法.
std::set<int> S1;
std::set<int> S2;
// ....
// Initialization of sets
// ....
std::vector V;
std::set<int>::iterator iter;
for(iter = S1.begin(); iter!=S1.end(); ++iter)
{
V.push_back(*iter);
}
for(iter = S2.begin(); iter!=S2.end(); ++iter)
{
V.push_back(*iter);
}
std::sort(V.begin(), V.end());
Run Code Online (Sandbox Code Playgroud)
这是我的代码,有更有效的方法吗?提前致谢.
当我编译以下代码(使用-std = c ++ 11编译器标志)时,我得到(仅)错误消息:"'vec'不是类,命名空间或枚举".
#include <vector>
#include <iterator>
int main(){
std::vector<int> vec(10,1);
vec::iterator it;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
因为我没有得到任何其他错误消息,对我来说这意味着一些名为'vec'的对象已被初始化,但不是作为向量,而是作为其他不是类的东西,因此范围运算符不能用过的.
据我所知,我使用了以下构造函数(http://en.cppreference.com/w/cpp/container/vector/vector):
vector(size_type count,
const T& value,
const Allocator& alloc = Allocator());
Run Code Online (Sandbox Code Playgroud)
如果它说这个构造函数"使用值值的元素的计数副本构造容器",那么我希望创建一个包含10个副本"1"的向量,但我必须误解一些东西,因此问题.
我的推理在哪里出错了,上面代码中的错误源自何处?
为C库编写C++包装器.在库中有一个接受缓冲区的函数unsigned char *.自从使用C++以来,我将我的真实缓冲区存储在std::vector<char>我也添加的包装器类中const,因为所讨论的缓冲区是一个输入缓冲区而且它不会被修改.但是我的代码没有编译,演示:
#include <stdio.h>
#include <vector>
void x(unsigned char *s)
{
printf("%s\n", s);
}
int main()
{
const std::vector<char> s(10);
x(reinterpret_cast<unsigned char *>(s.data())); // FAILS
}
Run Code Online (Sandbox Code Playgroud)
id有什么问题?如果我删除consts从const std::vector<char> s(10);它的工作原理,但我会喜欢你这样.
我正在尝试使用同一类的后代来创建类,以创建树,但是当我尝试访问vector的indeode时,它将永远无法工作。我尝试访问字符串时遇到异常:std :: length_error。
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class A {
public:
string name;
vector<A*> children;
};
int main()
{
A cl;
cl.name= "HI!";
for(int i = 0; i < 10;i++) {
A newCl;
newCl.name= "World!";
cl.children.push_back(&newCl);
}
for(int i = 0; i < 10;i++) {
// error here:
cout << cl.children[i]->name << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有谁知道用C ++制作树的更简单方法,或者如何解决这个问题?