小编The*_*ton的帖子

在C++中为什么我们不能使用>和<?来比较迭代器?

我被问到这个问题我不知道为什么.

如果你有一个指针int * x;
可以比拟的指针><,因为它代表的内存位置类似0x0000 0x0004 0x0008,等我知道迭代器和指针是不同的,但他们以非常相似的方式行事.

例如:

vector<int> myVector;

for(int i = 1; i < 101; i++)
{
    myVector.push_back(i);
}

vector<int>::iterator it = myVector.begin();
while(it != myVector.end()) //Why can't we write it < myVector.end()
{
    cout << *it << endl;
    it++;
}
Run Code Online (Sandbox Code Playgroud)

为什么我们不能< myVector.end()while声明中写出来?我知道这与STL中没有超载有关.然而,写作是&*it < &*myVector.end()有效的,因为它获得了显示说话的内存位置0x0004 0x0008等.

为什么是这样?

c++ syntax iterator loops idiomatic

9
推荐指数
1
解决办法
971
查看次数

关于C++迭代器的问题

在C++中,为什么我们不能使用'>'或'<'来比较InputIterators,ForwardIterators和BidirectionalIterators?但是,我们可以将RandomAccessIterators与'>'或'<'进行比较,例如std :: vector.这背后的原因是什么?

另外,为什么我们不能cout迭代器的内容?例如"cout << itr << endl;" 不行.这背后的原因是什么?迭代器很像指针,但我们可以指出指针而不是迭代器,为什么?

一般来说,迭代器和指针之间的内在差异是什么?我曾经认为它们是相似的,但我想我必须理解这一点才能达到理解c ++的新水平.

问题2:谢谢大家的精彩答案.关于迭代器,我还有一个问题.当迭代器超出界限时,为什么c ++打印出类似"50397953"的东西?不应该打印像NULL或'\ 0'这样的东西吗?

c++

6
推荐指数
1
解决办法
185
查看次数

extern和extern"C"表示变量

我正在编写一个C++共享库供C程序使用.但是,我有一个关于extern和的问题extern "C".

请考虑以下代码

我的头文件是这样的:

#ifdef __cplusplus      
     extern "C" int global;
     extern "C" int addnumbers(int a, int b); 
 #else
      extern int global;
 #endif
Run Code Online (Sandbox Code Playgroud)

这完美无缺; 我只需要申报

int global;
Run Code Online (Sandbox Code Playgroud)

在我的.cpp或我的.c文件中.但是,我不明白的是:

extern "C"extern这里有什么区别?我试着评论出来extern "C" int global并且有效!为什么?

我知道这extern "C"用于制作C链接.这就是我的原因extern "C" int addnumbers(int,int).换句话说,如果我想编写一个将在C程序中使用的C++函数,我会写extern "C".现在,全球变量怎么样 - 我猜这里的情况有所不同?我想C程序使用一个名为C++变量global,但我可以用externextern "C".这是为什么?这对我来说并不直观.

评论:我不认为这是重复的,因为我问的是当你将它用于变量与函数时有什么区别.

c c++ linkage extern-c

5
推荐指数
2
解决办法
3771
查看次数

ELF 格式:ELF 是 .o/.so 的子集还是 ELF 基本上是整个 .o/.so?

我目前正在研究 ELF 格式。我想确认一下我认为正确的事情。

ELF是一种格式,它代表可执行和可链接格式。在linux中,一切都是ELF格式。

当使用gcc编译带有-c和-fPIC文件的代码时,它会将代码转换为ELF格式的.o文件。

如果我说 .o/.so 和 linux 可执行文件是 ELF 文件,是否正确?或者 ELF 是 .o/.so 文件中的东西?换句话说,ELF 是 .o/.so 的子集还是 ELF 基本上是整个 .o/.so?

我想确认这一点,因为我想确保我理解这一点。抱歉问了一个愚蠢的问题。

linux elf

2
推荐指数
1
解决办法
1650
查看次数

Stack在C++中是否有迭代器?

据我所知,堆栈在C++中没有迭代器.例如,这篇文章(是否std :: stack公开迭代器?)明确指出堆栈没有迭代器.但是,我的主管告诉我,c ++中的堆栈应该有迭代器,因为它是一个标准的数据结构,你可以做stack.begin()(但是,据我所知,标准C++中没有这样的语法).我怎么说服他?为什么堆栈在C++中没有迭代器?

问题2:谢谢大家的精彩答案.我认为现在的问题归结为:为什么没有堆栈迭代器是有意义的?

c++

1
推荐指数
1
解决办法
1203
查看次数

标签 统计

c++ ×4

c ×1

elf ×1

extern-c ×1

idiomatic ×1

iterator ×1

linkage ×1

linux ×1

loops ×1

syntax ×1