相关疑难解决方法(0)

"STL"和"C++标准库"之间有什么区别?

有人把这篇文章给我的注意,声称(我意译)的STL长期被误指整个C++标准库,而不是从SGI STL中采取的部分.

(...)它指的是"STL",尽管很少有人仍然使用STL(在SGI设计).

C++标准库的一部分基于STL的一部分,正是这些部分,许多人(包括几位作者和臭名昭着的错误记录的cplusplus.com)仍然称为"STL".但是,这是不准确的; 事实上,C++标准从未提及"STL",两者之间存在内容差异.

(...)"STL"很少用于指代恰好基于SGI STL的stdlib的位.人们认为这是整个标准库.它被放在简历上.这是误导.

我几乎不了解C++的历史,所以我不能判断文章的正确性.我应该避免使用术语STL吗?或者这是一个孤立的意见?

c++ stl std c++-faq c++-standard-library

432
推荐指数
5
解决办法
9万
查看次数

21
推荐指数
2
解决办法
4947
查看次数

了解STL中的迭代器

嗨,所以我有点困惑迭代器和它们实际上是......在C++ STL中

在这种情况下我使用列表,我不明白你为什么要做一个迭代器:
std::list <int>::const_iterator iElementLocator;

由derefrence运算符dipslay列表的内容:
cout << *iElementLocator;

将它分配给list.begin()之后;

请解释一下迭代器究竟是什么以及我为什么要使用它/使用它!
谢谢!!

c++ iterator stl

9
推荐指数
2
解决办法
4025
查看次数

将大字符串发送到套接字

我是C ++的新手,后来遇到了这个问题。我正在尝试将大字符串发送到套接字。我已经在堆栈上看到了类似的问题,但是找不到真正的答案。例如这些:

通过套接字C ++发送长字符串

使用C ++(Winsock TCP / IP)发送带有套接字的字符串

C ++通过套接字发送字符串

他们中的大多数人依赖于这样的事实: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

我出现的一种方法是检索 …

c++ sockets string

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

STL迭代器 - 目的

STL迭代器的目的是什么?为什么程序员会创建这个概念呢?

c++ iterator stl

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

C++ 中的迭代器究竟是什么?

我试图掌握迭代器的概念。我通过以下代码运行了一些测试:

#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) 在两种情况下都保持不变(因为我们正在获取迭代器对象的地址)。

我不确定我是否理解正确,所以请告诉我是否正确,如果我错了请纠正我。

c++ pointers iterator

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

标签 统计

c++ ×6

iterator ×4

stl ×3

c++-faq ×1

c++-standard-library ×1

pointers ×1

sockets ×1

std ×1

string ×1