前期历史记录:我正在尝试确保某些函数foo(std::stringstream&)
使用流中的所有数据。
previous question的答案表明,使用stringstream::str()
是获取字符串流内容的正确方法。我也看到它用于将任意类型转换为string
,如下所示:
std::stringstream sstr;
sstr << 10;
assert(sstr.str() == std::string("10")); // Conversion to std::string for clarity.
然而,“内容”的概念有些模糊。例如,请考虑以下代码段:
#include <assert.h>
#include <sstream>
#include <iostream>
int main() {
std::stringstream s;
s << "10 20";
int x;
s >> x;
std::cout << s.str() << "\n";
return 0;
}
On Ideone(以及我的系统)此代码段打印10 20
,这意味着从stringstream
读取不会修改str()
返回的内容。所以,我的假设是str()
返回一些内部缓冲区,它最多可以stringstream
(或者,可能是其内部rdbuf
,默认情况下为stringbuf
来处理“该缓冲区中的当前位置”。这是一个known thing。
查看stringbuf::overflow()
函数(如果空间不足则重新分配缓冲区),我可以看到:
这可能会修改输入和输出受控序列的指针(最多为eback,gptr,egptr,pbase,pptr,epptr的六个)。
所以,基本上,没有理论保证写入stringstream
不会分配更大的缓冲区。因此,即使使用stringstream::str()
将int
转换为string
也存在缺陷:我的第一个代码段中的assert(sstr.str() == std::string("10"))
可能会失败,因为内部缓冲区不能保证精确到必要的大小
问题:获取stringstream
的“内容”的正确方法是什么,其中“内容”被定义为“可以从鲷鱼消耗的所有字符”?
当然,人们可以阅读char-by-char,但我希望找到一个不那么详细的解决方案。我对从stringstream
(我的第一个片段)中读取的内容感兴趣,因为我从未看到它失败。
答案 0 :(得分:0)
您可以使用(def prop-sorted-first-less-than-last
(prop/for-all [v (gen/not-empty (gen/vector gen/int))]
(let [s (sort v)]
(< (first s) (last s)))))
(tc/quick-check 100 prop-sorted-first-less-than-last)
;; => {:result false, :failing-size 0, :num-tests 1, :fail [[3]],
:shrunk {:total-nodes-visited 5, :depth 2, :result false,
:smallest [[0]]}}
函数(继承自UPDATE px
set px.FX_RATE_INVRS = isnull(EX.currencyrate,0)
from #TMP_GT_PROCESSED_JDI_TST px
left join ExchangeRate EX on EX.basecurrencycode = px.currency
)来查找当前输入位置。如果返回-1,则不再使用其他字符。否则,您可以使用<div *ngIf="(todaysdate | date:'MMM dd' == duedate | date:'MMM dd')">
List
</div>
返回tellg()
中未使用的字符。