有人把这篇文章给我的注意,声称(我意译)的STL长期被误指整个C++标准库,而不是从SGI STL中采取的部分.
(...)它指的是"STL",尽管很少有人仍然使用STL(在SGI设计).
C++标准库的一部分基于STL的一部分,正是这些部分,许多人(包括几位作者和臭名昭着的错误记录的cplusplus.com)仍然称为"STL".但是,这是不准确的; 事实上,C++标准从未提及"STL",两者之间存在内容差异.
(...)"STL"很少用于指代恰好基于SGI STL的stdlib的位.人们认为这是整个标准库.它被放在简历上.这是误导.
我几乎不了解C++的历史,所以我不能判断文章的正确性.我应该避免使用术语STL吗?或者这是一个孤立的意见?
嗨,所以我有点困惑迭代器和它们实际上是......在C++ STL中
在这种情况下我使用列表,我不明白你为什么要做一个迭代器:
std::list <int>::const_iterator iElementLocator;
由derefrence运算符dipslay列表的内容:
cout << *iElementLocator;
将它分配给list.begin()之后;
请解释一下迭代器究竟是什么以及我为什么要使用它/使用它!
谢谢!!
我是C ++的新手,后来遇到了这个问题。我正在尝试将大字符串发送到套接字。我已经在堆栈上看到了类似的问题,但是找不到真正的答案。例如这些:
使用C ++(Winsock TCP / IP)发送带有套接字的字符串
他们中的大多数人依赖于这样的事实:send一次调用即可发送全部数据,或者他们将使用char *代替std::string。
这是用C语言编写的小代码:
int SendAll(SOCKET client_socket, const void *data, int data_size)
{
const char *data_ptr = (const char*) data;
int bytes_sent;
while (data_size > 0)
{
bytes_sent = send(client_socket, data__ptr, data_size, 0);
if (bytes_sent == SOCKET_ERROR)
return -1;
data_ptr += bytes_sent;
data_size -= bytes_sent;
}
return 1;
}
Run Code Online (Sandbox Code Playgroud)
现在想象一下,而不是const void *data我们拥有std::string data。现在的问题是我如何可以移动指针到数据像这样data_ptr += bytes_sent;用std::string?
我出现的一种方法是检索 …
我试图掌握迭代器的概念。我通过以下代码运行了一些测试:
#include <iostream>
#include<map>
using namespace std;
int main(){
map<string,string> mp;//create the map
mp["key"]="value";//create a key/val pair
map<string,string>::iterator it=mp.begin();//create an iterator named it
cout<<(&it)<<" "<<(&*it)<<endl;// 0x7ffeeccd6a18 0x7f9dc5c05970
it++;//moving the current value of the iterator
cout<<(&it)<<" "<<(&*it);// 0x7ffeeccd6a18 0x7ffeeccd6a70
}
Run Code Online (Sandbox Code Playgroud)
根据我的理解,我们可以将迭代器概念化为一个包含值的盒子——我们正在迭代的可迭代对象的值。当我们做“it++”时;并移动迭代器的当前值,我们现在正在访问不同的元素,这就是 (&*it) 更改的原因。实际的框不会改变,这就是为什么 (&it) 在两种情况下都保持不变(因为我们正在获取迭代器对象的地址)。
我不确定我是否理解正确,所以请告诉我是否正确,如果我错了请纠正我。